java短路特性_Java8 新特性 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

//计数 count

@Test

public void countTest() {

long count = list.stream().count();

System.out.println(count);

}

细节决定成败!

个人愚见,如有不对,恳请扶正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值