zoukankan      html  css  js  c++  java
  • Java8 Stream流

    Java8的stream是个对集合中数据处理高层抽象,当然不止可以处理集合,也可以是数组,I/O channel, 产生器generator等。
    其中大数据量的处理推荐使用并行流,比如对0到1千亿的整数求和,jvm自动分配多线程进行分段求和,再将中间结果进行汇总再求和。其底层使用的是 fork/join实现,这种分段分而治之的思想跟map/reduce有点像。

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class StreamTest {
        public static void main(String[] args) {
            String[] strArray = {"abc", "", "bc", "efg", "abcd","", "jkl"};
            List<String> list = Arrays.asList(strArray);
            // list过滤掉为空的元素
            List<String> filtered =  list.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
            //当数据较多时,推荐使用并行流。 jvm会开启cpu core数个线程并行处理,并将结果归并。底层是用fork/join框架实现的。
            //List<String> filtered =  list.parallelStream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
            System.out.println(filtered);
            
            List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            // 获取对应的平方数,并对结果进行去重
            List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
            System.out.println(squaresList);
            squaresList.forEach(System.out::println);
        }
    }
  • 相关阅读:
    8.16
    8.6 总结
    Educational Codeforces Round 45 (Rated for Div. 2)
    Codeforces Round #487 (Div. 2)
    Codeforces Round #485
    codeforces Avito Code Challenge 2018
    MySQL索引知识面试题
    使用多线程优化复杂逻辑以及数据量多处理
    elasticsearch 和Ik 以及 logstash 同步数据库数据
    linux 安装elasticsearch步骤以及入的坑
  • 原文地址:https://www.cnblogs.com/lyhero11/p/13680070.html
Copyright © 2011-2022 走看看