gpt4 book ai didi

java - 使用java 8流基于java对象的多个属性检索不同的元素

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:00 25 4
gpt4 key购买 nike

如何使用 java 8 流根据多个条件从列表中获取不同的元素?

例如 - 让我们假设一个对象 Person :

class Person {
Integer id;
String name;
}

我想要一个包含 idname 的唯一组合的列表。
列表中可以有多个具有相同ID和名称的记录

最佳答案

您可以创建自己独特的方法,例如:

private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

因此您可以将它与过滤器一起使用:

List<Person> persons = listPersons.stream()
//@Holger suggest
.filter(distinctByKey(pr -> Arrays.asList(pr.getId(), pr.getName())))
.collect(toList());

看看这个:

如果您的名单上的人是:

List<Person> listPersons = Arrays.asList(
new Person(1, "person1"),
new Person(1, "person5"),
new Person(2, "person2"),
new Person(1, "person1"),
new Person(1, "person2"),
new Person(1, "person1"),
new Person(3, "person3")
);

输出

Person{id=1, name=person1}
Person{id=1, name=person5}
Person{id=2, name=person2}
Person{id=1, name=person2}
Person{id=3, name=person3}

关于java - 使用java 8流基于java对象的多个属性检索不同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48165456/

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