按键加入两张地图

bar*_*nus 7 java merge join map

我有两张地图:

Map<Integer, String> mapOne = {(1,"a"), (2, "b")};
Map<Integer, Double> mapTwo = {(1,10.0), (2,20.0)};
Run Code Online (Sandbox Code Playgroud)

我希望通过Integer值将这些映射组合成一个,所以结果映射是

Map<String, Double> mapResult = {("a",10.0), ("b",20.0)};
Run Code Online (Sandbox Code Playgroud)

有没有办法比迭代条目集更容易做到这一点?

ass*_*ias 9

假设两个映射的键匹配并且映射具有相同数量的条目,使用Java 8,您可以将它写在一行中:

Map<String, Double> map = mapOne.entrySet().stream()
                            .collect(toMap(e -> e.getValue(),
                                           e -> mapTwo.get(e.getKey())));
Run Code Online (Sandbox Code Playgroud)

因此,您从第一个地图开始并创建一个新地图,其中键是mapOne的值,值是mapTwo中的对应值.

从技术上讲,这有点相当于迭代第一个映射的入口集.

注意:要求 import static java.util.stream.Collectors.toMap;