【问题标题】:Create HashSet on the basis of Class Attribute基于Class Attribute创建HashSet
【发布时间】:2016-12-23 11:22:20
【问题描述】:

我必须使用 ArrayList 创建HashMap<Integer,List<StoreItem>>。我想要 HashSet 基于商店编号,就像我们在 Ios 中所做的那样,例如 myArrayList.distinctUnionOfObjects.storeNumber

public static List<StoreItem> getStoreList(){
        List<StoreItem> items = new ArrayList<>();

        items.add(new StoreItem(503,"Brufeen",10));
        items.add(new StoreItem(503,"hydriline",8));
        items.add(new StoreItem(503,"Brufeen",10));
        items.add(new StoreItem(503,"capsule",2));
        items.add(new StoreItem(503,"Disprin",6));


        items.add(new StoreItem(504,"Pixlar",9));
        items.add(new StoreItem(504,"Luprin",17));
        items.add(new StoreItem(504,"BOOM BOOM",14));
        items.add(new StoreItem(504,"Glucophage",22));
        items.add(new StoreItem(504,"Panadol",16));


        items.add(new StoreItem(549,"Pixlar",9));
        items.add(new StoreItem(549,"Luprin",17));
        items.add(new StoreItem(549,"BOOM BOOM",14));
        items.add(new StoreItem(549,"Glucophage",22));
        items.add(new StoreItem(549,"Panadol",16));

        return items;


    }

    public static HashMap<Integer,List<StoreItem>> getStoreHashMap(){
        List<StoreItem> oldStores = StoreFactory.getStoreList();

        Set<StoreItem> uniqueSet = new HashSet<StoreItem>(oldStores);

        HashMap<Integer,List<StoreItem>> dictionaryOfStore = new HashMap<>();

        for(StoreItem keyItem : uniqueSet )
        {
            List<StoreItem> storeInSection = new ArrayList<>();
            for(StoreItem oldItem : oldStores)
            {
                if(keyItem.getStoreNumber() == oldItem.getStoreNumber()){
                    storeInSection.add(oldItem);
                }
            }
            dictionaryOfStore.put(keyItem.getStoreNumber(),storeInSection);
        }

        return dictionaryOfStore;
    }

uniqueSet 返回 15,因为它比较了整个 StoreItem 对象。我需要一种基于 StoreItem.getStoreNumber()

创建 HashSet 的方法

StoreItem 在哪里

public class StoreItem {

    private int storeNumber;
    private String capsuleNames;
    private int quantity;

    public StoreItem(int storeNumber, String capsuleNames, int quantity) {
        this.storeNumber = storeNumber;
        this.capsuleNames = capsuleNames;
        this.quantity = quantity;
    }
}

或者有没有办法覆盖哈希集比较。

而且我知道我可以通过 For 循环中的检查来做到这一点。

【问题讨论】:

  • 我在考虑两个选项:(1) 使用TreeSet 和自定义比较器而不是HashSet (2) 如果您坚持使用HashSet,请将其设为@ 987654328@ 其中MyList 扩展ArrayList 与适当的equals()hashCode()

标签: java android hashset


【解决方案1】:

我认为您无法使用 Comparator 实现此目的。您可以像这样更改 getStorehashMap() 方法:

public static HashMap<Integer, List<StoreItem>> getStoreHashMap() {
    List<StoreItem> oldStores = getStoreList();
    HashMap<Integer, List<StoreItem>> dictionaryOfStore = new HashMap<Integer, List<StoreItem>>();

    for (StoreItem keyItem : oldStores) {
        if(!dictionaryOfStore.containsKey(keyItem.getStoreNumber())) {
            dictionaryOfStore.put(keyItem.getStoreNumber(), new ArrayList<StoreItem>());
        }
        dictionaryOfStore.get(keyItem.getStoreNumber()).add(keyItem);
    }

    return dictionaryOfStore;
}

【讨论】:

  • 我在for循环的最后一行填充了它。
猜你喜欢
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多