新的java流和我有一个快速的问题。我有一个物品清单。
List<Object> list = new ArrayList<>();
和具有不同对象的第二列表。
List<Object2> list2 = new ArrayList<>();
基本上我有一个过滤器方法来检查是否满足某些条件。如果条件为真:添加对象到列表如果方法返回null或条件为false过滤掉对象。这是我已经尝试过的,但我想知道什么应该是这种过滤的最佳实践。一个二个一个一个谢谢您。
cngwdvgl1#
您可以在没有外部函数的情况下使用groupingBy、reducingBy和Optional:
groupingBy
reducingBy
Optional
import static java.util.stream.Collectors.*; Map<Integer, Boolean> idExistMap = list2.stream().collect( groupingBy(A::getId, reducing(true, obj -> obj.isToChangeNum() == 1, (a, b) -> a && b))); List<A> res = list.stream() .filter(x -> x.status == Status.OLD) .map(x -> idExistMap.getOrDefault(x.getId(), false) ? Optional.of(x) : Optional.empty()) .flatMap(Optional::stream) // This will remove any empty Optional .collect(toList()); }
1条答案
按热度按时间cngwdvgl1#
您可以在没有外部函数的情况下使用
groupingBy
、reducingBy
和Optional
: