当前位置: 首页 > 知识库问答 >
问题:

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

东郭自珍
2023-03-14

我有一个地图

我想流式处理列表中的所有值

我如何让它从地图返回值?

这样的地图:

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

我给它的钥匙清单:

["Frank","Jim"]

预期结果:

["Car","Truck"]

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

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

共有2个答案

田翰林
2023-03-14

流式处理并过滤条目:

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

您只需检查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]
 类似资料:
  • 有一张单子 如何过滤列表,通过获得最高的映射组,然后使用Java Stream组合到列表中?结果示例如下: ps:如果在多个地图中有相同的值,请将它们全部保留在列表中。 初始代码:

  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是:

  • 我在迭代一个对象内的列表时遇到了一个问题,该对象内嵌在另一个映射中。我的目标是迭代这个列表并生成一个映射 ,我希望使用streams和lamdas来实现这一点。 我在上面看到了,我需要通过迭代FolderBo中的elementList从elementBo创建一个带有map 的映射。folderBo本身就在Modelbo的地图内。

  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?

  • 我有一个映射“m”和一个列表“l”,现在我想从那个映射“m”中获取值,使用“l”中可用的键列表。我想用Java 8流的概念,任何人都可以在这方面提供帮助。 我编码打印这些值,但我需要的是将值放入列表中 list.stream().foreach(s->{system.out.println(map.get(s));});

  • 我正在用Java8为一个文件编写一个解析器。使用读取该文件,并返回一个顺序的。 每一行都映射到一个数据对象,如下所示: 现在我们可以将流中的每一行映射到相应的结果: 但是,流现在包含要删除的值: 如我在中所知,如果需要结果,我如何组合映射/筛选操作?