我有两张地图:
Map<String, Integer> x;
Map<Integer, String> y;
我想要的是一个新映射Map<String,String>
,其中新映射在x中具有字符串键,而在y中则具有y的字符串值,其中这些新键对与String-> Integer->保持相同的映射。串。
有人知道在Java 8中使用流执行此操作的方法吗?
答案 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