Stream
Stream的创建方式
-
通过Collection系列集合提供
List<String> list = new ArrayList<>(); Stream<String> stream1 = list.stream();
-
通过Arrays中的静态方法获取数组流
String[] emps = new String[10]; Stream<String> stream2 = Arrays.stream(emps);
-
通过Stream类中的静态方法of()
Stream<String> stream3 = Stream.of("aa", "bb", "cc");
-
创建无限流
-
迭代
Stream<Integer> stream4 = Stream.iterate(0, x -> x + 2);
-
生成
Stream.generate(() -> Math.random())
-
中间操作
-
筛选与切片
-
filter
stream.filter(Predicate)
-
limit
stream.filter(long)
-
skip
stream.skip(long)
-
distinct
通过hashcode(),equals()进行去重
stream.distinct()
-
-
映射
-
map
将元素转换成其他形式或提取信息。map中的Function本身也会返回一个流。
map(Function)
-
flatMap
会整合Function本身返回的流。
flatMap(Function)
-
-
排序
-
sorted()
自然排序
stream.sorted()
-
sorted(Comparator)
定制排序,指定Comparator
stream.sorted(Comparator)
-
终止操作
-
查找与匹配
-
allMatch
检查是否匹配所有元素
stream.allMatch()
-
anyMatch
检查是否至少匹配一个元素
-
nonMatch
检查是否没有匹配所有元素
-
findFisrt()
返回第一个元素
-
findAny
返回当前流中的任意元素
-
count
返回流中的元素的个数
-
max(Comparator)
返回流中的最大值
-
min(Comparator)
返回流中的最小值
-
-
归约
-
reduce(T, BinaryOperator)
将流中的元素反复结合起来,得到一个新值。
Stream.of(1,2,3,4,5).reduce(0, (x, y) -> x + y)
-
-
收集
-
collect(Collector)
将流转换为其他形式,包括转换,分组,分区等
Stream.of("11", "aa", "bb").collect(Collectors.toSet()); Stream.of("11", "aa", "bb").collect(Collectors.coutning()); ...
-
并行流与串行流
了解使用Fork/Join框架
Stream可以使用parallel()与sequential()切换并行流与顺序流。
特点
- 惰性求值
- 内部迭代