将键与值列表进行比较 Java
Compare keys with llist of values Java
假设 TreeMap<String,List> one
及其副本如下所示,
我想将第一个中的所有键与第二个中的所有值进行比较。如果键值不匹配,如 AUF_1060589919844_59496 和 AUF_1421272434570_1781 在这种情况下,我想取回键及其值。
{AUF_1060589919844_59496=[AUF_1086686287581_9999,
AUF_1086686329972_10049, AUF_1079023138936_6682],
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743],
AUF_1421268533080_1741=[AUF_1421268719761_1776],
AUF_1421272434570_1781=[AUF_1087981634453_7022]}
上面的副本
{AUF_1060589919844_59496=[AUF_1086686287581_9999,
AUF_1086686329972_10049, AUF_1079023138936_6682],
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743],
AUF_1421268533080_1741=[AUF_1421268719761_1776],
AUF_1421272434570_1781=[AUF_1087981634453_7022]}
如果我的假设是正确的,您需要所有不是值的键;
嗯,这是非常肮脏的做法。
Set<String> keys= new HashSet<String>(one.keySet()); //ensure we don't mess up with the actual keys in the Map
for(List list : one.values()){
keys.removeAll(list); //remove all those Keys that are in values
}
// print out keys that are not values
System.out.println(keys);
使用 set 会让生活变得轻松,因为它不包含重复项,而且我们可以非常快速地删除值(使用 removeAll() 方法)
我从你的问题中了解到的是获取值中不存在的键及其值。我认为没有必要创建它的副本。我发布了一个代码片段,我想这一定会对你有所帮助
Map<String, List<String>> map = new HashMap<String, List<String>>(); //Add elements in map
Collection<List<String>> list = map.values();
List<String> values = new ArrayList<String>();
for (List<String> listValues : list) {
values.addAll(listValues);
}
for (String key : map.keySet()) {
if (!values.contains(key)) {
System.out.println("key ---->" + key);
System.out.println("Values ------->");
for (String value : map.get(key)) {
System.out.println(value);
}
}
}
假设 TreeMap<String,List> one
及其副本如下所示,
我想将第一个中的所有键与第二个中的所有值进行比较。如果键值不匹配,如 AUF_1060589919844_59496 和 AUF_1421272434570_1781 在这种情况下,我想取回键及其值。
{AUF_1060589919844_59496=[AUF_1086686287581_9999,
AUF_1086686329972_10049, AUF_1079023138936_6682],
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743],
AUF_1421268533080_1741=[AUF_1421268719761_1776],
AUF_1421272434570_1781=[AUF_1087981634453_7022]}
上面的副本
{AUF_1060589919844_59496=[AUF_1086686287581_9999,
AUF_1086686329972_10049, AUF_1079023138936_6682],
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743],
AUF_1421268533080_1741=[AUF_1421268719761_1776],
AUF_1421272434570_1781=[AUF_1087981634453_7022]}
如果我的假设是正确的,您需要所有不是值的键;
嗯,这是非常肮脏的做法。
Set<String> keys= new HashSet<String>(one.keySet()); //ensure we don't mess up with the actual keys in the Map
for(List list : one.values()){
keys.removeAll(list); //remove all those Keys that are in values
}
// print out keys that are not values
System.out.println(keys);
使用 set 会让生活变得轻松,因为它不包含重复项,而且我们可以非常快速地删除值(使用 removeAll() 方法)
我从你的问题中了解到的是获取值中不存在的键及其值。我认为没有必要创建它的副本。我发布了一个代码片段,我想这一定会对你有所帮助
Map<String, List<String>> map = new HashMap<String, List<String>>(); //Add elements in map
Collection<List<String>> list = map.values();
List<String> values = new ArrayList<String>();
for (List<String> listValues : list) {
values.addAll(listValues);
}
for (String key : map.keySet()) {
if (!values.contains(key)) {
System.out.println("key ---->" + key);
System.out.println("Values ------->");
for (String value : map.get(key)) {
System.out.println(value);
}
}
}