将键与值列表Java进行比较

时间:2015-02-17 12:25:45

标签: java comparison key-value treemap

假设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]}

2 个答案:

答案 0 :(得分:1)

我从你的问题中理解的是获得价值及其价值不存在的关键。我认为没有必要创建它的副本。我发布了一个代码片段,我认为这肯定会对你有所帮助

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); } } }

答案 1 :(得分:0)

如果我的假设是正确的,你想要所有非价值的键;

这是非常肮脏的做法。

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()方法)