Java 8:从另外两个地图X-> Y和Y-> Z获取新地图X-> Z

时间:2019-08-15 18:27:29

标签: java-8

我有两张地图:

Map<String, Integer> x;
Map<Integer, String> y;

我想要的是一个新映射Map<String,String>,其中新映射在x中具有字符串键,而在y中则具有y的字符串值,其中这些新键对与String-> Integer->保持相同的映射。串。

有人知道在Java 8中使用流执行此操作的方法吗?

3 个答案:

答案 0 :(得分:2)

x.entrySet()
 .stream()
 .collect(Collectors.toMap(
      e -> e.getKey(),
      e -> y.get(e.getValue())
 ));

但这可能由于多种原因而失败,您可以考虑如何解决:就像将要发生的事情一样,x中有一个值,但是y中不存在这样的键;还是x中有多个相同的值?如果您使问题更加清楚,所有这些都可以解决。

答案 1 :(得分:2)

使用第一个地图的条目集的简单实现如下所示:

Map<String, String> result = x.entrySet().stream()
        .collect(Collectors.toMap(Map.Entry::getKey, e -> y.get(e.getValue())));

答案 2 :(得分:0)

您必须遍历x条目的条目集,并将y的值对应于x的值。 当y中不存在该值并且可能返回null时,总是有机会 在这种情况下,您可以使用Optional.ofNullable()的{​​{1}}方法上的y将其默认为某个值,并在以后处理默认值。但是考虑到get()x的大小可能不一样,这仍然是一种冒险的方法。

示例:

y