
本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.reduce
对于更细粒度的控制,有另一个流 API 函数,名为reduce,可用于对 Number 流中的值求和:
1 2 3 4 | Integer sum4AllHarder = listOfNums
.parallelStream()
.map(Number::getValue)
.reduce(0, (sofar, next) -> sofar + next);
|
2.collect
collect是非常有用的终止操作,将流中的元素存放在不同类型的结果中。Java8通过内置的Collectors类支持多种内置的收集器。所以对于大部分常见操作,并不需要自己实现收集器。
1 2 3 4 5 6 7 | List<Person> filtered =
persons
.stream()
.filter(p -> p.name.startsWith( "P" ))
.collect(Collectors.toList());
System.out.println(filtered);
|
3.flatMap
flatMap将流中的每个元素,转换为其它对象的流。所以每个对象会被转换为零个、一个或多个其它对象,以流的形式返回。这些流的内容之后会放进flatMap所返回的流中。
1 2 3 4 5 6 7 8 9 10 11 12 | List<Foo> foos = new ArrayList<>();
IntStream
.range(1, 4)
.forEach(i -> foos.add( new Foo( "Foo" + i)));
foos.forEach(f ->
IntStream
.range(1, 4)
.forEach(i -> f.bars.add( new Bar( "Bar" + i + " <- " + f.name))));
|
以上就是java数据流的高级用法,在使用之前需要对这些函数的基础用法有所了解,再结合我们所学的数据流进行运用。基础知识不够牢固的,可以去查阅对应的资料进行复习。