我正在尝试将某个类的列表插入哈希Map。键应该是列表中的一个字段,在我的例子中是id,哈希Map的值应该是以键作为其id的列表项。
下面是我试图做的一个例子:
// example class
public class Dog{
int id,
int name,
int foodEaten
}
// getters
// dog objects
Dog dog1 = new Dog(1,"Dog1", "Cheese")
Dog dog2 = new Dog(1,"Dog1", "Meat")
Dog dog3 = new Dog(2,"Dog2", "Fish")
Dog dog4 = new Dog(2,"Dog2", "Milk")
List<Dog> dogList = new ArrayList<>();
//insert dog objects into dog list
//Creating HashMap that will have id as the key and dog objects as the values
HashMap<Integer, List<Dog>> map = new HashMap<>();
这就是我想做的
for (int i = 0; i < dogList.size()-1; i++) {
List<Dog> cx = new ArrayList<>();
if (dog.get(i).getId() == dog.get(i+1).getId()){
cx.add(dog.get(i));
}
map.put(dog.get(i).getId(), cx);
}
然而,我得到的结果是:
{
"1": [
{
"id": 1,
"name": "Dog1",
"foodEaten": "Cheese"
}
],
"2": []
}
但这正是我想要实现的:
{
"1": [
{
"id": 1,
"name": "Dog1",
"foodEaten": "Cheese"
},
{
"id": 1,
"name": "Dog1",
"foodEaten": "Meat"
}
],
"2": [
{
"id": 2,
"name": "Dog2",
"foodEaten": "Fish"
},
{
"id": 2,
"name": "Dog2",
"foodEaten": "Milk"
}
]
}
3条答案
按热度按时间bttbmeg01#
嗨,托什,欢迎来到stackoverflow。
当您检查两个对象的id时,问题出现在if语句中。
在这里,您检查同一个名为“dog”的对象的id,在if语句中您将始终得到true。这就是为什么它用两个id的所有值填充Map。
另一个问题是dog4的id等于1,即dog1和dog2的id。考虑到这一点,你仍然无法实现你想要的,所以也要检查一下。
现在是解决方案。如果你想把每只狗和下一只狗进行比较,你就需要写下不同的。我不确定你是在使用java还是android,但是有一个解决方案可以解决这个问题,而且代码的版本更干净。
有了Java8,你就有了流api,它可以帮助你做到这一点。在这里检查
同样对于android,你可以在这里查看android linq
rjjhvcjd2#
印刷品
狗类
5n0oy7gb3#
你可以用
Collectors.groupingBy(Dog::getId)
用同样的方法把狗分组id
.演示:
输出:
这个
toString
实施: