使用Java Stream流的filter()map()方法可以轻松地实现匹配List<ChargeScheme>List<RoomRevenueConfigChargeScheme>集合中ChargeScheme的id,并将匹配到的RoomRevenueConfigChargeScheme中的room信息赋值给ChargeSchemerooms属性。

假设ChargeScheme对象有一个属性id和一个集合List<Room> roomsRoomRevenueConfigChargeScheme对象有属性ChargeSchemeroomRevenueConfig,而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);
        });

代码解析:

  1. 使用filter()方法过滤chargeSchemes集合,找出ChargeSchemeidroomRevenueConfigChargeSchemes集合中ChargeSchemeid相同的对象。
  2. 使用forEach()方法遍历过滤后的ChargeScheme对象。
  3. forEach()方法中,使用filter()方法再次过滤roomRevenueConfigChargeSchemes集合,找出ChargeSchemeid与当前ChargeScheme对象id相同的RoomRevenueConfigChargeScheme对象。
  4. 使用map()方法将这些RoomRevenueConfigChargeScheme对象的roomRevenueConfig属性转换为Room对象。
  5. 使用collect()方法将这些Room对象收集为一个List集合。
  6. 最后将这个List集合赋值给当前ChargeScheme对象的rooms属性。

通过以上代码,即可实现将roomRevenueConfigChargeSchemes集合中与chargeSchemes集合中ChargeSchemeid相同的RoomRevenueConfigChargeScheme对象的room信息赋值给chargeSchemes集合的rooms属性。

Java Stream流:使用filter()和map()方法匹配ChargeScheme和Room信息

原文地址: https://www.cveoy.top/t/topic/ozVF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录