如果结果为空,则执行Java流以删除元素

mqkwyuun  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(99)

新的java流和我有一个快速的问题。
我有一个物品清单。

List<Object> list = new ArrayList<>();

和具有不同对象的第二列表。

List<Object2> list2 = new ArrayList<>();

基本上我有一个过滤器方法来检查是否满足某些条件。如果条件为真:
添加对象到列表
如果方法返回null或条件为false
过滤掉对象。
这是我已经尝试过的,但我想知道什么应该是这种过滤的最佳实践。
一个二个一个一个
谢谢您。

cngwdvgl

cngwdvgl1#

您可以在没有外部函数的情况下使用groupingByreducingByOptional

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());
}

相关问题