Java8-回路端子の新しいストリーム動作

-Circuit端末操作

ストリームの新機能のJava8実践例

非短絡端末操作は、すべての要素がLiが終了するまで、最後まで終了し、すべてを超えているということです。彼らが望むデータを収集するために使用します。
方法は以下のとおりです。

リチウムのforeach通過
減少が低減
最大値maxの
最小値min
重合収集の
カウント数を

李のforeach回

 //遍厉 forEach
@Test
public void forEachTest() {
    list.stream()
            .forEach(iter ->
                    //以json格式输出
                    System.out.println(
                            JSON.toJSONString(iter, true)));
}
//在最后的时候输出所有的sku里面的值,不做别的操作

削減は、削減します

//归约 reduce
@Test
public void reduceTest() {
    //reduce可以对流里面的数值进行,求和,最大值,最小值,拼接。。
    //你可以在reduce里面做任何自己想做的操作。
    //下面的min,max,都是reduce的简化。
    Optional<Double> 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<Double> max = list.stream()
            .map(Sku::getSkuPrice)
            .max(Double::compareTo);
            //如果的别的类型的话,也可以用别的类型里面的compareTo操作
    System.out.println(max.get());
    //4999.0
}

最小分

@Test
public void minTest() {
    Optional<Double> min = list.stream()
            .map(Sku::getSkuPrice)
            .min(Double::compareTo);
            //如果的别的类型的话,也可以用别的类型里面的compareTo操作
    System.out.println(min.get());
    //78.2
}

重合コレクト

//聚合 collect
@Test
public void collectTest() {
    Stream<String> s1 = Stream.of("aa", "ab", "c", "ad");
    //定义一个谓词
    Predicate<String> predicate = t -> t.contains("a");
    //通过自定义规则收集自己想要的数据
    ArrayList<String> collect = s1.parallel().collect(() -> new ArrayList<String>(),
            (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);
}



詳細は、成功または失敗!決定

されていない場合、立ち直り尋ね、個人の愚見を!

おすすめ

転載: www.cnblogs.com/xdtg/p/12008642.html