我有一个对象列表:
@Getter
@Setter
class Cat {
int id;
int legs;
int head;
}
List<Cat> catsLegs = new ArrayList<>();
我用一些数据填写此列表:
for (int i = 0; i < 10; i++) {
Cat cat = new Cat();
cat.setId(i);
cat.setLegs(i + i);
cats.add(cat);
}
然后我有另一个清单
List<Cat> catsHeads = new ArrayList<>();
我用一些数据填写此列表:
for (int i = 0; i < 10; i++) {
Cat cat = new Cat();
cat.setId(i);
cat.setHead(i*i);
cats.add(cat);
}
然后我想合并这两个列表和如果id相等,那么Cats是相等的。
@Override
public boolean equals(Object o) {
if (!(o instanceof Cat)) {
return false;
}
Cat that = (Cat) o;
return this.id.equals(that.id);
}
还有3个领域,但这是一个基本原则。
非常感谢。
答案 0 :(得分:1)
Map<Integer, Cat>
Map
List
根据Map
以下是如何合并列表,以便能够覆盖:
Map<Integer, Cat> map = new HashMap<>();
for (Cat cat : catsLegs) {
map.put(cat.getId(), cat);
}
for (Cat cat : catsHeads) {
map.put(cat.getId(), cat);
}
Collection<Cat> cats = map.values();
// If you really need a List, you create a new one as next
List<Cat> catsList = new ArrayList<>(cats);
答案 1 :(得分:0)
最简单的方法是循环查看猫的列表并检查if (catHead.id == catTail.id)
但这并不是很酷。
更好的解决方案是将数据存储在HashMap
而不是List
中。这样,您可以使用哈希键作为ID,将哈希值作为Cat
对象。以这种方式检索对象要容易得多,当然要快得多。
答案 2 :(得分:0)
这就是我所做的。它传输所有对象头,我有新鲜的catList.size(),因为我不希望旧的currentCats对象在最终列表中。
public static void updateCats(List<Cat> catsFromServer) {
setAllCatsLegs(catsFromServer);
List<Cat> currentCats = getAllCats();
for (Cat currentCat : currentCats) {
for (Cat fromServer : catFromServer) {
if (currentCat.equals(fromServer)) {
fromServer.setHeads(currentcat.getHeads());
}
}
}
Contact.saveMultiple(contactsFromServer);
}
upd:
List<Cat> currentCats = getAllCats();
for (Cat cat : catsFromServier) {
int index = currentCats.indexOf(cat);
if (index != -1) {
cat.setHeads(currentCats.get(index).getHeads);
}
}