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

Java 8 Stream filter all the values from a map given a list of keys

我有一个Map<String, String>

我想流式传输 List<String> 中的所有值,我调用 keys

我怎样才能得到这个 return 地图上的值?

这样的地图:

("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())