gpt4 book ai didi

java - 如何将流中的所有元素减少到公共(public)字段?

转载 作者:行者123 更新时间:2023-11-29 08:22:40 27 4
gpt4 key购买 nike

我有一个 List<Person>并想检查所有人都属于同一个人 TypePerson .在这种情况下,这是根据年龄得出的。如果全部相同,则返回该通用类型。

以下是有效的,但我觉得首先将人员类型收集到一个集合中并不是最佳选择,然后我只返回其中的第一个元素。可以优化以下吗?

class Person {
int age;
}

enum TypePerson {
BABY, CHILD, ADULT;
}

//should check if the list contains only a single person type, and return it.
TypePerson reduceToSinglePersonType(List<Person> persons) {
Set<TypePerson> types = persons.stream()
.map(p -> resolvePersonType(person.age))
.collect(Collectors.toSet());

if (types.size() != 1) return null; //nothing in common
return types.iterator().next();
}

TypePerson resolvePersonType(int age) {
if (age < 2) return BABY;
if (age < 10) return CHILD;
return ADULT;
}

最佳答案

如果你想要的只是(唯一的)减少的值(value),你不需要建立一个集合。只需将所有项目与列表中第一项的值进行比较,如果全部匹配则返回它:

if (!persons.isEmpty()) {
// get the first (only?) person type
TypePerson possiblyOnlyType = resolvePersonType(persons.get(0).age);
// if all items in list have same value...
if (persons.stream()
.allMatch(person -> resolvePersonType(person.age) == possiblyOnlyType)) {
return possiblyOnlyType;
}
}
return null;

关于java - 如何将流中的所有元素减少到公共(public)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56255924/

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