如何将Map <String,List <String >>转换为java 8功能API中的Map <String,String>

dev*_*l83 2 java java-8 java-stream

我有一张像波纹管的地图,

 [key = "car", value = ["bmw", "toyota"]]
 [key = "bike", value = ["honda", "kawasaki"]]
Run Code Online (Sandbox Code Playgroud)

我想使用java 8功能apis将其转换为另一个地图,如bellow,

 [key = "bmw", value = "car"]
 [key = "toyota", value = "car"]
 [key = "honda", value = "bike"]
 [key = "kawasaki", value = "bike"]
Run Code Online (Sandbox Code Playgroud)

tep*_*pic 6

将地图值展平为条目然后收集它们:

Map<String, String> m2 = map
    .entrySet()
    .stream()
    .flatMap(e -> e.getValue().stream().map(v -> new AbstractMap.SimpleEntry<>(v, e.getKey())))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

这可以通过导入AbstractMap.SimpleEntry和缩短Map.Entry.

  • @Eugene:但是每个人都应该知道它们不相同,即`Map.entry`不允许`null`,既不是key也不是value.如果理解这一点并且不是实际用例的问题,那么它可能是更好的选择. (2认同)