如何创建与标志(布尔值)关联的自定义 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();
    }
}