作者:师弟 | 来源:互联网 | 2022-12-30 08:49
1> davidxxx..:
在Java 8中,您的整个代码可以像这样编写(如提出的其他精细答案):
Map> myHashMap = new HashMap();
for (Person person : persons) {
myHashMap.computeIfAbsent(age,age->new ArrayList()).add(person);
}
但是,你可能会更通过收集成一个流短Map
带Collectors.groupingBy()
:
Map> myMap = persons.stream().collect(Collectors.groupingBy(Person:getAge));
作为旁注,您的实际Java 7代码也可以得到改进.当然,没有Java 8那么多,但如果你不能使用Java 8,这可能会很有趣.
在您的实际代码中,这是重复的:
personsOfSameAge.add(person);
并且您使用两个条件语句(if
和else
),而只有if
在您首先处理特殊情况时才足够:没有值Map
.
这是一个修改版本:
Map> myHashMap = new HashMap<>();
for (Person person : persons) {
int age = person.getAge();
List persOnsOfSameAge= myHashMap.get(age);
if (persOnsOfSameAge== null) {
persOnsOfSameAge= new ArrayList();
myHashMap.put(age, personsOfSameAge);
}
personsOfSameAge.add(person);
}
2> Eran..:
是的,Java 8中有:
List persOnsOfSameAge= myHashMap.computeIfAbsent(age,age->new ArrayList());
personsOfSameAge.add(person);
要不就
myHashMap.computeIfAbsent(age,age->new ArrayList()).add(person);