我最终从后端获取对象,我必须跟踪它们。我需要一个没有重复项的集合,但每次从后端获取同一个对象时,我都会得到一个新实例,所以我必须手动比较它的String键。我想。
另外,这些对象需要一个与它们相关联的布尔值,因为它们可能在此列表中并被“使用”,我应该稍后知道。
一个典型的场景是我在我的收藏中有一个10个对象列表,我获取了8个新对象,只有3个是新的。我应该将这3个添加到这些列表中并丢弃5个重复的列表。
我即将开始为此实现自定义集合。是否有可能将Pair与List或HashMap结合使用?我一直在考虑这个,我无法得出结论。
答案 0 :(得分:0)
答案 1 :(得分:0)
在对象的类中,覆盖equals()
和hashCode()
,以指定何时可以将类的两个实例视为相同。
如果你这样做,你可以简单地将它们扔进HashSet
,它将确保其中的元素不相同(根据你在重写方法中提供的定义)
看看这个类似的问题: Implement equals with Set
答案 2 :(得分:0)
为了将来参考,我实现了一个自定义类,其中包含一个对象列表和一个包含我的布尔值的数组。由于我必须保持列表和数组同步,我不得不在所有步骤上迭代此列表。
这是我的代码:
public class PromoCollection {
public static List<ParseObject> promotions = new ArrayList<ParseObject>();
public static List<Boolean> isTriggered = new ArrayList<Boolean>();
public static void add(ParseObject newObj) {
for (ParseObject p : promotions) {
if (p.getObjectId().equals(newObj.getObjectId())) {
return; // Object already in list, do not add
}
}
promotions.add(newObj); // Add new object
isTriggered.add(false); // And respective boolean
}
public static void remove(ParseObject obj) {
for (int i = 0; i < promotions.size(); ++i) {
if (obj.getObjectId().equals(promotions.get(i).getObjectId())) {
promotions.remove(i);
isTriggered.remove(i);
return;
}
}
}
public static void trigger(ParseObject obj) {
for (int i = 0; i < promotions.size(); ++i) {
if (obj.getObjectId().equals(promotions.get(i).getObjectId())) {
isTriggered.set(i, true);
}
}
}
public static boolean isTriggered(ParseObject obj) {
for (int i = 0; i < promotions.size(); ++i) {
if (obj.getObjectId().equals(promotions.get(i).getObjectId())) {
return isTriggered.get(i);
}
}
throw new ArrayStoreException();
}
}