如何创建与标志(布尔值)关联的自定义 objects 的动态列表?
How to create a dynamic list of custom objects associated with a flag (boolean)?
我最终从后端获取 objects,我必须跟踪它们。我需要一个没有重复项的 collection,但每次我从后端获取相同的 object 时,我都会得到一个新实例,所以我想我必须手动比较它的 String 键。
此外,这些 object 需要一个与之关联的布尔值,因为它们可能在此列表中并且是 "used",我稍后应该知道。
一个典型的场景是,我的 collection 中有一个包含 10 个对象的列表,我获取了 8 个新对象,其中只有 3 个是新对象。我应该将这 3 个添加到这些列表中并丢弃 5 个重复的。
我即将开始为此实施自定义 Collection。有没有可能将 Pair 与 List 或 HashMap 结合起来?我一直在思考这个问题,我无法得出结论。
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E) 尝试一组。它不允许重复。
在对象的 class 中,覆盖 equals()
和 hashCode()
以指定何时可以将 class 的两个实例视为相同。
如果你这样做,你可以简单地将它们放入 HashSet
中,它会确保其中的所有元素都是相同的(根据你在重写方法中提供的定义)
看看这个类似的问题:
Implement equals with Set
为了将来参考,我实现了一个自定义 class,其中包含一个对象列表和一个包含我的布尔值的数组。因为我必须保持列表和数组同步,所以我必须在所有步骤中迭代这个列表。
这是我的代码:
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();
}
}
我最终从后端获取 objects,我必须跟踪它们。我需要一个没有重复项的 collection,但每次我从后端获取相同的 object 时,我都会得到一个新实例,所以我想我必须手动比较它的 String 键。
此外,这些 object 需要一个与之关联的布尔值,因为它们可能在此列表中并且是 "used",我稍后应该知道。
一个典型的场景是,我的 collection 中有一个包含 10 个对象的列表,我获取了 8 个新对象,其中只有 3 个是新对象。我应该将这 3 个添加到这些列表中并丢弃 5 个重复的。
我即将开始为此实施自定义 Collection。有没有可能将 Pair 与 List 或 HashMap 结合起来?我一直在思考这个问题,我无法得出结论。
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E) 尝试一组。它不允许重复。
在对象的 class 中,覆盖 equals()
和 hashCode()
以指定何时可以将 class 的两个实例视为相同。
如果你这样做,你可以简单地将它们放入 HashSet
中,它会确保其中的所有元素都是相同的(根据你在重写方法中提供的定义)
看看这个类似的问题: Implement equals with Set
为了将来参考,我实现了一个自定义 class,其中包含一个对象列表和一个包含我的布尔值的数组。因为我必须保持列表和数组同步,所以我必须在所有步骤中迭代这个列表。
这是我的代码:
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();
}
}