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);
    }
}
原文地址:https://www.cnblogs.com/lyhero11/p/13680070.html