gpt4 book ai didi

java - 使用流元素之间的相关性过滤流

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:16 24 4
gpt4 key购买 nike

假设有一个 Person看起来像这样的类:

public class Person {
private int id;
private String discriminator;
// some other fields plus getters/setters
}

现在我有一个 StreamPerson元素和该流可能包含多个 Person具有相同 id 的实例, 但不同 discriminator值,即 [Person{“id”: 1, “discriminator”: “A”}, Person{“id”: 1, “discriminator”: “B”}, Person{“id”: 2, “discriminator”: “A”}, ...]

我想做的是过滤掉所有Person如果至少有一个 Person,则有一些 id 的实例具有特定鉴别器值的 id 的实例。因此,继续上面的示例,按鉴别器值“A”过滤将产生一个空集合(当然是在归约操作之后),而按鉴别器值“B”过滤将产生一个不包含任何 Person 的集合。 id 等于 1 的实例。

我知道我可以使用 groupingBy 减少流收集器和组元素 Person.id然后从生成的 Map 中删除映射如果映射列表包含 Person具有指定鉴别器值的元素,但我仍然想知道是否有更简单的方法来实现相同的结果?

最佳答案

如果我对您的问题的理解正确,您首先会找到所有与鉴别器匹配的 ID:

Set<Integer> ids = persons.stream()
.filter(p -> "A".equalsIgnoreCase(p.getDiscriminator()))
.map(Person::getId)
.collect(Collectors.toSet())

然后删除匹配的条目:

persons.removeIf(x -> ids.contains(x.getId()))

关于java - 使用流元素之间的相关性过滤流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47270541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com