我有一个String
,ArrayList<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....
}
}
}
答案 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);
}