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

 

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM