如何创建与标志关联的自定义对象的动态列表(布尔值)?

时间:2015-05-18 16:11:39

标签: java android collections

我最终从后端获取对象,我必须跟踪它们。我需要一个没有重复项的集合,但每次从后端获取同一个对象时,我都会得到一个新实例,所以我必须手动比较它的String键。我想。

另外,这些对象需要一个与它们相关联的布尔值,因为它们可能在此列表中并被“使用”,我应该稍后知道。

一个典型的场景是我在我的收藏中有一个10个对象列表,我获取了8个新对象,只有3个是新的。我应该将这3个添加到这些列表中并丢弃5个重复的列表。

我即将开始为此实现自定义集合。是否有可能将Pair与List或HashMap结合使用?我一直在考虑这个,我无法得出结论。

3 个答案:

答案 0 :(得分:0)

http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)尝试使用套装。它不允许重复。

答案 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();
    }
}