Java Stream流:使用filter()和map()方法匹配ChargeScheme和Room信息
使用Java Stream流的filter()和map()方法可以轻松地实现匹配List<ChargeScheme>和List<RoomRevenueConfigChargeScheme>集合中ChargeScheme的id,并将匹配到的RoomRevenueConfigChargeScheme中的room信息赋值给ChargeScheme的rooms属性。
假设ChargeScheme对象有一个属性id和一个集合List<Room> rooms,RoomRevenueConfigChargeScheme对象有属性ChargeScheme和roomRevenueConfig,而roomRevenueConfig对象又包含属性room。
下面是使用Java Stream流的具体代码示例:
List<ChargeScheme> chargeSchemes = ...;
List<RoomRevenueConfigChargeScheme> roomRevenueConfigChargeSchemes = ...;
chargeSchemes.stream()
.filter(chargeScheme -> roomRevenueConfigChargeSchemes.stream()
.anyMatch(roomRevenueConfigChargeScheme -> roomRevenueConfigChargeScheme.getChargeScheme().getId().equals(chargeScheme.getId())))
.forEach(chargeScheme -> {
List<Room> rooms = roomRevenueConfigChargeSchemes.stream()
.filter(roomRevenueConfigChargeScheme -> roomRevenueConfigChargeScheme.getChargeScheme().getId().equals(chargeScheme.getId()))
.map(RoomRevenueConfigChargeScheme::getRoomRevenueConfig)
.map(RoomRevenueConfig::getRoom)
.collect(Collectors.toList());
chargeScheme.setRooms(rooms);
});
代码解析:
- 使用
filter()方法过滤chargeSchemes集合,找出ChargeScheme的id与roomRevenueConfigChargeSchemes集合中ChargeScheme的id相同的对象。 - 使用
forEach()方法遍历过滤后的ChargeScheme对象。 - 在
forEach()方法中,使用filter()方法再次过滤roomRevenueConfigChargeSchemes集合,找出ChargeScheme的id与当前ChargeScheme对象id相同的RoomRevenueConfigChargeScheme对象。 - 使用
map()方法将这些RoomRevenueConfigChargeScheme对象的roomRevenueConfig属性转换为Room对象。 - 使用
collect()方法将这些Room对象收集为一个List集合。 - 最后将这个
List集合赋值给当前ChargeScheme对象的rooms属性。
通过以上代码,即可实现将roomRevenueConfigChargeSchemes集合中与chargeSchemes集合中ChargeScheme的id相同的RoomRevenueConfigChargeScheme对象的room信息赋值给chargeSchemes集合的rooms属性。
原文地址: https://www.cveoy.top/t/topic/ozVF 著作权归作者所有。请勿转载和采集!