基本上,我说 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));
}
答案 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);