0
点赞
收藏
分享

微信扫一扫

java stream reduc的一点用法


随便写个简单启动项目, springboot 或者 控制台
随便两个简单class.
​​​ReqDTO.java​

@Data
public class ReqDTO {

private List<ReqModel> list;

}

​ReqModel.java​

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReqModel {

private Integer age;

private String name;
}

随便弄个启动方法

package cn.codejam.demo.controller;

import cn.xuetian.demo.dto.ReqDTO;
import cn.xuetian.demo.dto.ReqModel;
import com.google.common.collect.Lists;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
* @author zss
* @date 2022/9/14 10:54

*/
@RestController
@RequestMapping("/test1")
public class Test1Controller {

@GetMapping("/test1")
public String test1(@RequestBody ReqDTO req) {

List<ReqModel> list = Lists.newArrayList(
new ReqModel(1, "aaa"), new ReqModel(2, "bbb"), new ReqModel(3, "ccc")
);


ReqModel result = list.stream().reduce(
new ReqModel(100, "AA"),
(reqModel, reqModel2) -> {
int i = reqModel.getAge() + reqModel2.getAge();
return new ReqModel(i, reqModel.getName() + reqModel2.getName());
}
);

ReqModel result1 = list.stream().reduce(

(reqModel, reqModel2) -> {
int i = reqModel.getAge() + reqModel2.getAge();
return new ReqModel(i, reqModel.getName() + reqModel2.getName());
}
).orElse(null);


//其中, BinaryOperator<U> combiner, combiner在串行流中不起作用而在并行流中起作用:
ReqModel result2 = list.parallelStream().reduce(
new ReqModel(100, "AA"),
(reqModel, reqModel2) -> {
int i = reqModel.getAge() + reqModel2.getAge();
return new ReqModel(i, reqModel.getName() + reqModel2.getName());
},
(reqModel, reqModel2) -> {
int i = reqModel.getAge() + reqModel2.getAge();
return new ReqModel(i, reqModel.getName() + reqModel2.getName());
}
);

return com.alibaba.fastjson.JSON.toJSONString(result);
}
}

调试一下, 看看效果就懂了.

总结

java stream reduc的一点用法_reduce方法

其中, 前两个比较像.
以累加为例: 区别就是前面的 identity其实就是一个额外项, 也会累加进去. 顺便保证返回总是有内容的,不为null.

第三个参数比较复杂的,
只用记住一句话就够了: ​​​BinaryOperator<U> combiner, combiner在串行流中不起作用而在并行流中起作用​


举报

相关推荐

0 条评论