如何将一组键输入到一个映射中,并获得与这些键对应的值数组?

时间:2016-11-16 10:11:26

标签: java hashmap

基本上,我说 Map<整数,字符串> {1 - > “a”,2 - > “b”,4 - > “d”} theMap,

我有一个 ArrayList<整数> {1,2,3} someKeys

我该怎么做:

ArrayList<String> someValues = theMap.get(someKeys);

并且someValues的内容为{“a”,“b”,null}

看起来像这么简单的问题,但我花了最后半小时搜索,却找不到任何东西。除了

之外,还有更好的方法
for(int i = 0; i<someKeys.size(); i++
{
    someValues.add(theMap.get(someKeys.get(i));
}

2 个答案:

答案 0 :(得分:1)

您可以使用Stream s:

List<String> values = someKeys.stream()
                              .map(k->theMap.get(k))
                              .collect(Collectors.toList());

这将为未出现在Map中的密钥添加空值,您可以通过额外的过滤步骤消除这些空白:

List<String> values = someKeys.stream()
                              .map(k->theMap.get(k))
                              .filter(Objects::nonNull)
                              .collect(Collectors.toList());

List<String> values = someKeys.stream()
                              .filter(k->theMap.containsKey(k))
                              .map(k->theMap.get(k))
                              .collect(Collectors.toList());

答案 1 :(得分:0)

万一你不能使用java 8并且改变地图不是问题,那么在地图的 keySet 中调用 retainAll()方法:)< / p>

    Map<Integer, String> myMap = new HashMap<>();
    myMap.put(1, "A");
    myMap.put(2, "A");
    myMap.put(4, "A");
    List<Integer> myKeys = new ArrayList<>();
    myKeys.add(1);
    myKeys.add(2);
    myKeys.add(3);
    myMap.keySet().retainAll(myKeys);
    System.out.println("filtered" + myMap);