map
final List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
final List<Integer> doubleNumbers = numbers.stream()
.map(number -> number * 2)
.collect(Collectors.toList());
结果:[2, 4, 6, 8]
也可以搞成其他的类型,初始List是Integer,也可以变成String
final List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
final List<String> numberIndex = numbers.stream()
.map(number -> "#" + number)
.collect(Collectors.toList());
结果:[#1, #2, #3, #4]
reduce
1.不提供初始值的reduce,返回值是Optional,表示可能为空,使用orElseGet可以返回一个null时的默认值
final List<Integer> numbers = Arrays.asList(, , , );
final Optional<Integer> sum = numbers.stream()
.reduce((a, b) -> a + b);
sum.orElseGet(() -> );
结果:10
这里的(a, b) -> a + b的类型其实是BinaryOperator,它接受两个类型相同的参数
当把numbers改为Arrays.asList()时,结果为0。
2.使用初始值的reduce,因为提供了初始值,所以返回值不再是Optional
final List<Integer> numbers = Arrays.asList(, , , );
final Integer sum = numbers.stream()
.reduce(, (a, b) -> a + b);
结果:10
http://blog.csdn.net/kiwi_coder/article/details/31771475
http://www.cnblogs.com/shinn-sjl/p/5781468.html