Чтобы фильтровать и сопоставлять несколько полей из потока Java, вы можете использовать различные методы, доступные в Stream API. Вот несколько подходов, которые вы можете рассмотреть:
-
Использование map() и filter():
List<SomeObject> filteredAndMappedList = originalList.stream() .filter(condition) .map(obj -> new MappedObject(obj.getField1(), obj.getField2())) .collect(Collectors.toList());
-
Использование 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());
-
Использование 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());
-
Использование 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
фактическими именами классов и адаптировать условия и сопоставления полей в соответствии со своими требованиями.