Java 8新特性Stream非短絡端末操作

2846 ワード

非短絡端末操作
Java 8新機能Stream練習例
非短絡端末の操作は、すべての要素が最後に終わるまで徹底していることです.自分の欲しいデータを集めるのに使います.方法は次のとおりです.
遍厉forEach帰約reduce最大値max最小値min集約collectカウントcount
全力を尽くすforEach
 //   forEach
@Test
public void forEachTest() {
    list.stream()
            .forEach(iter ->
                    // json    
                    System.out.println(
                            JSON.toJSONString(iter, true)));
}
//           sku    ,      

帰約reduce
//   reduce
@Test
public void reduceTest() {
    //reduce           ,  ,   ,   ,  。。
    //    reduce            。
    //   min,max,  reduce   。
    Optional reduceSum = list.stream()
            .map(Sku::getSkuPrice)
            .reduce(Double::sum);
    System.out.println(reduceSum.get());
    //11326.5
    Double reduceSumTest = list.stream()
            .map(Sku::getSkuPrice)
            .reduce(100.00, Double::sum);
    System.out.println(reduceSumTest);
    //11426.5
    Integer reduce = Stream.of(1, 2, 3).
            reduce(4,
                    (integer, integer2) -> integer + integer2,
                    (integer, integer2) -> integer + integer2);
    System.out.println(reduce);
    //      :10
    //     :18, of    :parallel() 
}

ある文章はこの問題に対して分析するのが特に良いです: >>
最大値max
//    max
@Test
public void maxTest() {
    Optional max = list.stream()
            .map(Sku::getSkuPrice)
            .max(Double::compareTo);
            //         ,           compareTo  
    System.out.println(max.get());
    //4999.0
}

最小値min
@Test
public void minTest() {
    Optional min = list.stream()
            .map(Sku::getSkuPrice)
            .min(Double::compareTo);
            //         ,           compareTo  
    System.out.println(min.get());
    //78.2
}

集約collect
//   collect
@Test
public void collectTest() {
    Stream s1 = Stream.of("aa", "ab", "c", "ad");
    //      
    Predicate predicate = t -> t.contains("a");
    //                
    ArrayList collect = s1.parallel().collect(() -> new ArrayList(),
            (array, s) -> {
                if (predicate.test(s))
                    array.add(s);
            },
            (array1, array2) -> array1.addAll(array2));
    collect.forEach(System.out::println);
    /**
     * aa
     * ab
     * ad
     */
    //          ,  :toList,toSet,toMap...
}

ある文章はこの問題に対して分析するのが特に良いです: >>
カウントカウントカウント
//   count
@Test
public void countTest() {
    long count = list.stream().count();
    System.out.println(count);
}

細部が成否を決める!
個人の愚見、もし間違いがあれば、助けてください.