reduce java_Java流之reduce

reduce是流操作比较核心的一个方法,max,min,collector等操作,基本都是由reduce来实现的。

reduce 将多个对象转化一个对象。例如求和,求积,求最大值等等操作。

示例代码:

/**

* method1

*

* 对象 >> 对象

*/

public static void testReduce1() {

List objs = Arrays.asList(new Obj(1, "张三"), new Obj(1, "李四"), new Obj(2, "王五"), new Obj(2, "张三"), new Obj(3, "王五"));

Obj obj1 = objs.stream()

.reduce((tmp, obj2) -> {

if (tmp.id >= obj2.id) {

return tmp;

}

return obj2; })

.orElse(null);

System.out.println(obj1.id);

}

这里的代码是求出id最大值的对象,reduce只有一个参数的接口。其实实现接口是处理2个元素,返回一个元素。

其中,obj与obj2是相邻的两元素。返回的新元素在与下一个元素传入。

还有一种,传入2个参数的。第一个参数相当于初始值(item的初始值)。

/**

* method3

*

* 对象 >> 对象

*/

public static void testReduce3() {

List objs = Arrays.asList(new Obj(1, "张三"), new Obj(1, "李四"), new Obj(2, "王五"), new Obj(2, "张三"), new Obj(3, "王五"));

Obj obj1 = objs.stream()

.reduce(new Obj(0, "初始值"), (tmp, obj2) -> {

if (tmp.id >= obj2.id) {

return tmp;

}

return obj2;

});

System.out.println(obj1.id);

}

以上操作是处理item里面的元素,最后结果也是一个item。

2. reduce 处理每一个元素,然后将每一个元素转化为一个新的对象(一般是集合)

示例代码:

/**

* method2

*

* 对象 >> 对象收集器(一般是集合)

* 这里实现id去重

*/

public static void testReduce2() {

List objs = Arrays.asList(new Obj(1, "张三"), new Obj(1, "李四"), new Obj(2, "王五"), new Obj(2, "张三"), new Obj(3, "王五"));

List objList = objs.stream()

.reduce(new ArrayList<>(), (list, item) -> {

if (list.stream().anyMatch(ob -> item.id == ob.id)) {

return list;

}

list.add(item);

return list;

}, (list, list2) -> list);

System.out.println(objList);

}

这里使用reduce实现了去重的功能。修改转换部分,可以实现过滤,放大等等操作。

第一个参数,就是一需要转换的对象初始方法。

第二个参数,是你对每一个元素与你要转换的方法的处理方式。

第三个参数,针对并行流处理,会有多个你要转化的参数,他们之间如何合并。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值