比较hasmap键中的ArrayList

时间:2018-03-19 06:21:31

标签: java android arraylist hashmap

我有一个StringArrayList<String>类型的哈希地图。两个不同的keys存储在哈希映射中,其中包含值列表。

现在我必须比较不同键的值并提取公共值。如何实现这一功能?

以下是我正在使用的Hashmap类型:

示例列表:

{Size=[43, 53, 63, 48, 58], Color=[66, 62, 65, 64, 63]}
  

这是代码......

    private HashMap<String, ArrayList<String>> mapMatchvalues = new HashMap<>();

     for (Map.Entry<String, ArrayList<String>> map3 : mapMatchvalues.entrySet()) {
     List<String> getList1 = new ArrayList<>();
     getList1 = map3.getValue();

           for (int i = 0; i < getList1.size(); i++) {
                   if (getList.contains(getList1.get(i))) {
                    //Print values
                    } else {
                   // Print if not matched....
             }
      }
}

4 个答案:

答案 0 :(得分:5)

您可以使用retainAll。如果您不想影响现有列表中的值,请使用新的ArrayList

List<String> common = new ArrayList<>(mapMatchvalues.get("key1"));
common.retainAll(mapMatchvalues.get("key2"));

common将包含列表中的匹配元素。

如果地图中有多个条目,则可以循环显示

// initialize the common list with List
List<String> common = new ArrayList<>(mapMatchvalues.entrySet().iterator().next().getValue());
for (List<String> list : mapMatchvalues.values()) {
    common.retainAll(list);
}

答案 1 :(得分:0)

只需重复hashmap,看看某个值是否与ArrayList中的值匹配。

HashMap<String,String> hashmap=new HashMap<String,String>();
    hashmap.put("Key ABC","ABC");
    hashmap.put("Key BCD","BCD");
    hashmap.put("Key CDE","CDE");
    hashmap.put("Key DEF","DEF");

    for(Map.Entry map : hashmap.entrySet()){
        if (list.contains(map.getValue()))
            System.out.println("VALUE: " + map.getKey());
    }

答案 2 :(得分:0)

请试试这个

HashMap<String, ArrayList<String>> mapMatchvalues = new HashMap<>();
    ArrayList<String> list = new ArrayList<>();
    ArrayList<String> list1 = new ArrayList<>();
    ArrayList<String> list2 = new ArrayList<>();

    list.add("43");
    list.add("53");
    list.add("63");
    list.add("48");
    list.add("58");

    list1.add("66");
    list1.add("62");
    list1.add("65");
    list1.add("64");
    list1.add("63");

    list2.add("21");
    list2.add("22");
    list2.add("23");
    list2.add("25");
    list2.add("63");

    mapMatchvalues.put("Size", list);
    mapMatchvalues.put("Color", list1);
    mapMatchvalues.put("Color1", list2);


    for (Map.Entry map : mapMatchvalues.entrySet()) {
        if (list.contains(map.getValue()))
            Log.e("VALUE: ", map.getKey() + "");
    }

    ArrayList<String> commonItem = new ArrayList<>();
    for (String item : mapMatchvalues.get("Size")) {
        if (mapMatchvalues.get("Color").contains(item) && mapMatchvalues.get("Color1").contains(item)) {
            commonItem.add(item);
        } else {
            //uniqueList.add(item);
        }
    }

    Log.e("tag", commonItem + "");

答案 3 :(得分:0)

获取最常见的ArrayList:

public static List<String> common(Map<String, List<String>> theMap) {
    Map<List<String>, Integer> resultMap = new HashMap<>();
    for (Map.Entry<String, List<String>> entry : theMap.entrySet()) {
        resultMap.put(entry.getValue(), 0);
        for (Map.Entry<String, List<String>> entry2 : theMap.entrySet()) {
            if (equalLists(entry.getValue(), entry2.getValue())) {
                resultMap.put(entry.getValue(), resultMap.get(entry.getValue()) + 1);
            }
        }
    }
    return resultMap.entrySet().stream().max((x, y) -> x.getValue().compareTo(y.getValue())).get().getKey();
}

public static boolean equalLists(List<String> one, List<String> two) {
    if (one == null || two == null) {
        return false;
    }
    if (one.size() != two.size()) {
        return false;
    }
    //use a copy of lists to keep the order intact
    one = new ArrayList<String>(one);
    two = new ArrayList<String>(two);
    Collections.sort(one);
    Collections.sort(two);
    return one.equals(two);
}