hashmap和list compare

时间:2010-06-10 10:59:38

标签: java

我有一个包含四个值abcd和只有a的列表的哈希地图我想看看哈希是否有哈希值值a并打印出来。

hashmap.get('data')结果abcd

列表l正在a

我将如何仅打印值a

4 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,您可以使用地图的values()方法和结果的retainAll方法解决问题:

HashMap<Integer, String> somePairs = new HashMap<Integer, String>();
somePairs.put(1, "a");
somePairs.put(2, "b");
somePairs.put(3, "c");
somePairs.put(4, "d");

List<String> list = Arrays.asList("a");

// Start off with all values in the map:
List<String> result = new ArrayList<String>(somePairs.values());

// Keep only those values present in list
result.retainAll(list);

来自the API documentation on retainAll

  

仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。

答案 1 :(得分:1)

地图存储键值对。它提供了values()方法来从地图中获取所有值的集合。

所以基本上你必须采用自己的列表,从hashmap中获取值并检查列表中的每个项目(如果它是地图值):

public static Collection<String> contains(Map<String, String> map, List<String> list) {

   Collection<String> values = map.values();
   Set<String> result = new HashSet<String>();
   for (String listItem:list) {
     if (values.contains(listItem) {
       result.add(listItem);
     }
   }
   return result;  // contains a collection of all list items that are values of the map
}

答案 2 :(得分:0)

Java Map(包括HashMap)有一个keySet()方法来解锁密钥。它返回一组键。如果将List转换为Set(通过使用带有列表的HashMap构造函数),则可以使用Set的retainAll(...)方法从地图的键和列表中获取值的交集。

答案 3 :(得分:0)

基本上,您希望地图hashmap中的值与列表l中的值的并集。 这应该可以解决问题:

CollectionUtils.union(hashmap.values(), l)

这需要类路径上的Apache Commons Collections库,它为集合提供了许多有用的功能。