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

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

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

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

我想要做的是过滤掉所有具有一些id的Person实例,如果至少有一个具有该id的具有特定鉴别值的Person实例.因此,继续上面的例子,通过鉴别器值“A”过滤将产生一个空集合(当然,在还原操作之后),并且通过鉴别器值“B”过滤将产生一个不包含id等于的任何Person实例的集合. 1.

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

解决方法:

如果我正确理解您的问题,您将首先找到与鉴别器匹配的所有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()))
上一篇:mmdetection安装记录(使用google colab安装)


下一篇:java – 流减少身份与幂等值