gpt4 book ai didi

java - 添加到 HashMap 上的列表值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:38 25 4
gpt4 key购买 nike

我正在填充一个 HashMap ,让我的对象按其属性之一分组。我发现在将我的对象添加到列表(值)之前检查列表(值)是否存在是“丑陋的”。

一个例子会更明确:

// Need a map to group Person by age.
// Person = {age: int}
Map<Integer, List<Person>> myHashMap = new HashMap();

for (Person person : persons) {
int age = person.getAge();
List<Person> personsOfSameAge = myHashMap.get(age);
if (personsOfSameAge != null) {
personsOfSameAge.add(person);
} else {
personsOfSameAge = new ArrayList();
personsOfSameAge.add(person);
myHashMap.put(age, personsOfSameAge);
}
}

有没有更好的编码方式?

myHashMap.addToValueListOrCreateValueList(myObject);

最佳答案

在 Java 8 中,你的整个代码可以这样写(正如其他提出的很好的答案):

Map<Integer, List<Person>> myHashMap = new HashMap();

for (Person person : persons) {
myHashMap.computeIfAbsent(age,age->new ArrayList<Person>()).add(person);
}

但是你可以通过使用流收集到 MapCollectors.groupingBy() 来更短:​​

Map<Integer, List<Person>> myMap = persons.stream().collect(Collectors.groupingBy(Person:getAge));

附带说明一下,您的实际 Java 7 代码也可以改进。当然,不如 Java 8 多,但如果您不能使用 Java 8,这可能会很有趣。
在您的实际代码中,这是重复的:

personsOfSameAge.add(person);

并且您使用了两个条件语句(ifelse),而如果您首先处理特殊情况,则仅 if 就足够了:否Map 中的值。
这是修改后的版本:

Map<Integer, List<Person>> myHashMap = new HashMap<>();

for (Person person : persons) {
int age = person.getAge();
List<Person> personsOfSameAge = myHashMap.get(age);
if (personsOfSameAge == null) {
personsOfSameAge = new ArrayList();
myHashMap.put(age, personsOfSameAge);
}
personsOfSameAge.add(person);
}

关于java - 添加到 HashMap 上的列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563867/

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