Java8新特性stream()一些常见用法
对象数组转字段数组
把一个对象集合转成对象中某个字段的集合:
List<Coupon> couponList = 查询出来的集合
List<Long> couponIds = couponList.stream().map(Coupon::getCouponId).collect(Collectors.toList());
- 获取集合中的couponId的集合;
- Coupon为对象,couponId为想要获得的对象字段;
- 返回对象List泛型为字段属性的类型。
将一个对象数组转另一个对象数组
将一个对象数组集合转另一个对象数组集合,常用于DTO转换:
List<Coupon> couponList = 查询出来的集合
List<CouponDto> CouponDtos = couponList.stream().map(config -> Convert.convert(CouponDto.class, config)).collect(Collectors.toList());
- 将Coupon对象数组转为CouponDto对象数组;
- Convert引入了hutool的jar包;
-
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency>
- 字段名一致的才会将值映射。
对一个对象数组中的对象进行过滤
对一个对象数组中的对象进行过滤,常用于筛选某个字段不等于某个条件:
List<Coupon> couponList = 查询出来的集合
List<Coupon> Coupons = couponList.stream().filter(item -> Convert.convert(item.getCouponType==type).collect(Collectors.toList());
- 将Coupon对象类型中couponType字段等于type的集合筛选出来;
- type是变量,可以修改;
对一个对象数组中的对象添加字段属性
对一个对象数组中的对象添加字段属性:
public ResponseEntity<List<SysCodeDto>> getCertificates(String itemCode) {
Map<String, String> codeRelDown = new HashMap<>();
codeRelDown.put("22", "zltx");//质量体系调查表
codeRelDown.put("12", "wts");//委托书
codeRelDown.put("08", "zbxy");//质保协议
if ("12".equals(itemCode)) {
return ResponseEntity.ok(sysCodeService.list(new LambdaQueryWrapper<SysCode>()
.in(SysCode::getItemCode, "01", "02", "08", "11", "12", "17", "19", "22")
.eq(SysCode::getCode, "1012"))
.stream().map(config -> {
SysCodeDto sys = Convert.convert(SysCodeDto.class, config);
sys.setDownloads(codeRelDown.get(sys.getItemCode()));
return sys;
})
.collect(Collectors.toList()));
} else if ("15".equals(itemCode)) {
return ResponseEntity.ok(sysCodeService.list(new LambdaQueryWrapper<SysCode>()
.in(SysCode::getItemCode, "01", "02", "12", "45", "46")
.eq(SysCode::getCode, "1012"))
.stream().map(config -> {
SysCodeDto sys = Convert.convert(SysCodeDto.class, config);
sys.setDownloads(codeRelDown.get(sys.getItemCode()));
return sys;
})
.collect(Collectors.toList()));
}
- 将查出来的结果集中等于这三个证书的将对象字段downloads添加值;
- 根据itemCode查找集合;