Фильтрация и сопоставление нескольких полей из Java Stream

Чтобы фильтровать и сопоставлять несколько полей из потока Java, вы можете использовать различные методы, доступные в Stream API. Вот несколько подходов, которые вы можете рассмотреть:

  1. Использование map() и filter():

    List<SomeObject> filteredAndMappedList = originalList.stream()
       .filter(condition)
       .map(obj -> new MappedObject(obj.getField1(), obj.getField2()))
       .collect(Collectors.toList());
  2. Использование FlatMap() и filter():

    List<MappedObject> filteredAndMappedList = originalList.stream()
       .flatMap(obj -> {
           if (condition) {
               return Stream.of(new MappedObject(obj.getField1(), obj.getField2()));
           }
           return Stream.empty();
       })
       .collect(Collectors.toList());
  3. Использование Stream.Builder:

    Stream.Builder<MappedObject> builder = Stream.builder();
    for (SomeObject obj : originalList) {
       if (condition) {
           builder.add(new MappedObject(obj.getField1(), obj.getField2()));
       }
    }
    List<MappedObject> filteredAndMappedList = builder.build().collect(Collectors.toList());
  4. Использование Collectors.collectingAndThen():

    List<MappedObject> filteredAndMappedList = originalList.stream()
       .filter(condition)
       .collect(Collectors.collectingAndThen(Collectors.toList(),
           list -> list.stream()
               .map(obj -> new MappedObject(obj.getField1(), obj.getField2()))
               .collect(Collectors.toList())));

Это всего лишь несколько примеров того, как можно фильтровать и сопоставлять несколько полей из потока Java. Не забудьте заменить SomeObjectи MappedObjectфактическими именами классов и адаптировать условия и сопоставления полей в соответствии со своими требованиями.