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); } }