Java8 map****和****reduce

Java8 map****和****reduce

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(1, 2, 3, 4);

 final Optional<Integer> sum = numbers.stream()

 .reduce((a, b) -> a + b);

sum.orElseGet(() -> 0);

结果:10

这里的(a, b) -> a + b的类型其实是BinaryOperator,它接受两个类型相同的参数

当把numbers改为Arrays.asList()时,结果为0。

2.使用初始值的reduce,因为提供了初始值,所以返回值不再是Optional

final List<Integer> numbers = Arrays.asList(1, 2, 3, 4);

 final Integer sum = numbers.stream()

 .reduce(0, (a, b) -> a + b);

结果:10

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容