【问题标题】:Java 8 Stream filter all the values from a map given a list of keysJava 8 Stream过滤给定键列表的映射中的所有值
【发布时间】:2021-08-09 23:30:03
【问题描述】:

我有一个Map<String, String>

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

我怎样才能让它从地图中返回值?

这样的地图:

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

我给它的钥匙列表:

["Frank","Jim"]

预期结果:

["Car","Truck"]

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

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

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    您只需检查 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(cars::get).filter(Objects::nonNull)
    【解决方案2】:

    流式传输和过滤条目:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多