将Java Map >转换为Map >

问题描述 投票:0回答:1

Map<Obj1, Collection<Obj2>>转换为Map<Obj2, Collection<Obj1>>的良好做法是什么?

我尝试用MultiMap来做。

    Map<Obj1, Collection<Obj2>> originalMap = ...;
    Multimap<Obj1, Obj2> multiMap = ArrayListMultimap.create();
    originalMap.forEach(multiMap::putAll);
    Map<Obj2, Collection<Obj1>> convertedMap = Multimaps.invertFrom(multiMap, ArrayListMultimap.create()).asMap();

有更好的方法吗?

java guava
1个回答
0
投票

您可以使用Java 8 Streams实现相同的功能;

Map<Obj1, List<Obj2>> originalMap = ...

Map<Obj2, List<Obj1>> reversedMap = originalMap.entrySet().stream()
        .flatMap(obj2s -> obj2s.getValue().stream()
                .map(obj2 -> Map.entry(obj2, obj2s.getKey())))
        .collect(
                Collectors.groupingBy(
                        Map.Entry::getKey, 
                        Collectors.mapping(Map.Entry::getValue, Collectors.toList())
                )
        );

© www.soinside.com 2019 - 2024. All rights reserved.