Java 8流从给定键列表的映射中过滤所有值



我有一个Map<String, String>

我想流式传输List<String>中的所有值,我称之为keys

我怎么能得到这个从映射返回值?

像这样映射:

("Frank", "Car")
("Bob", "Bike")
("Jim", "Truck")

我给它的键列表:

["Frank","Jim"]

预期结果:

["Car","Truck"]

我试过了,但它只是打印键而不是值。

keys.stream()
.filter(map::containskey)
.collect(Collectors.toList())

您只需检查,如果键存在于Map中,如果它们存在,则将它们保留在结果流中。要用值替换键,可以使用map()

public static void main(String[] args) {
Map<String, String> cars = new HashMap<>();
cars.put("Frank", "Car");
cars.put("Bob", "Bike");
cars.put("Jim", "Truck");
List<String> keys = new ArrayList<>();
keys.add("Frank");
keys.add("Jim");
List<String> result = keys
.stream()
.filter(cars::containsKey)
.map(cars::get)
.collect(Collectors.toList());
System.out.println(result);
}

输出:

[Car, Truck]

流式传输并过滤条目:

map.entrySet().stream()
.filter(e -> keys.contains(e.getKey()))
.map(Map.Entry::getValue)
.collect(Collectors.toList())

最新更新