java 8 map reduce_Java8 map和reduce

img class="desc_img" src="http://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E7%BE%8E%E6%99%AF%E5%9B%BE%E7%89%87&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=-1&cs=4045164136,3453875281&os=2350101120,4146613540&simid=3481191515,286189991&pn=66&rn=1&di=142937176250&ln=1000&fr=&fmq=1471433657767_R&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=&istype=2&ist=&jit=&bdtype=0&adpicid=0&pi=&gsm=1e&objurl=http:%2F%2Fwww.taopic.com%2Fuploads%2Fallimg%2F120619

map

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

final List doubleNumbers = numbers.stream()

.map(number -> number * 2)

.collect(Collectors.toList());

结果:[2, 4, 6, 8]

也可以搞成其他的类型,初始List是Integer,也可以变成String

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

final List numberIndex = numbers.stream()

.map(number -> "#" + number)

.collect(Collectors.toList());

结果:[#1, #2, #3, #4]

reduce

1.不提供初始值的reduce,返回值是Optional,表示可能为空,使用orElseGet可以返回一个null时的默认值

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

final Optional 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 numbers = Arrays.asList(1, 2, 3, 4);

final Integer sum=numbers.stream()

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

结果:10

http://blog..net/kiwi_coder/article/details/31771475

http://www.cnblogs.com/shinn-sjl/p/5781468.html

img class="desc_img" src="http://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E7%BE%8E%E6%99%AF%E5%9B%BE%E7%89%87&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=-1&cs=4045164136,3453875281&os=2350101120,4146613540&simid=3481191515,286189991&pn=66&rn=1&di=142937176250&ln=1000&fr=&fmq=1471433657767_R&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=&istype=2&ist=&jit=&bdtype=0&adpicid=0&pi=&gsm=1e&objurl=http:%2F%2Fwww.taopic.com%2Fuploads%2Fallimg%2F120619 map final List numbers = Arrays.asList(1, 2, 3, 4); final List doubleNumbers = numbers.stream() .map(number -> number * 2) .collect(Collectors.toList()); 结果:[2, 4, 6, 8] 也可以搞成其他的类型,初始List是Integer,也可以变成String final List numbers = Arrays.asList(1, 2, 3, 4); final List numberIndex = numbers.stream() .map(number -> "#" + number) .collect(Collectors.toList()); 结果:[#1, #2, #3, #4] reduce 1.不提供初始值的reduce,返回值是Optional,表示可能为空,使用orElseGet可以返回一个null时的默认值 final List numbers = Arrays.asList(1, 2, 3, 4); final Optional 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 numbers = Arrays.asList(1, 2, 3, 4); final Integer sum=numbers.stream() .reduce(0, (a, b) -> a + b); 结果:10 http://blog..net/kiwi_coder/article/details/31771475 http://www.cnblogs.com/shinn-sjl/p/5781468.html
经验分享 程序员 微信小程序 职场和发展