首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8将Map<K、List<V>>转换为Map<V、List<K>>

Java8提供了一种简洁的方式将Map<K, List<V>>转换为Map<V, List<K>>,可以使用Stream API和Lambda表达式来实现。

首先,我们需要导入java.util.stream.Collectors类,该类提供了一些用于集合操作的静态方法。

然后,我们可以使用Stream的flatMap方法来将Map<K, List<V>>转换为Stream<Map.Entry<V, K>>,其中每个Map.Entry对象表示一个键值对。

接下来,我们可以使用Collectors.groupingBy方法将Stream<Map.Entry<V, K>>按照V进行分组,得到一个Map<V, List<Map.Entry<V, K>>>。

最后,我们可以使用Collectors.mapping方法将Map<V, List<Map.Entry<V, K>>>中的每个值(List<Map.Entry<V, K>>)转换为List<K>,得到最终的Map<V, List<K>>。

下面是示例代码:

代码语言:java
复制
import java.util.*;
import java.util.stream.Collectors;

public class MapConverter {
    public static void main(String[] args) {
        // 原始的Map<K, List<V>>
        Map<String, List<Integer>> map = new HashMap<>();
        map.put("A", Arrays.asList(1, 2, 3));
        map.put("B", Arrays.asList(4, 5));
        map.put("C", Arrays.asList(6, 7, 8));

        // 转换为Map<V, List<K>>
        Map<Integer, List<String>> convertedMap = map.entrySet().stream()
                .flatMap(entry -> entry.getValue().stream().map(value -> new AbstractMap.SimpleEntry<>(value, entry.getKey())))
                .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

        // 输出转换后的Map<V, List<K>>
        for (Map.Entry<Integer, List<String>> entry : convertedMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

输出结果为:

代码语言:txt
复制
1: [A]
2: [A]
3: [A]
4: [B]
5: [B]
6: [C]
7: [C]
8: [C]

这个示例代码将原始的Map<K, List<V>>转换为了Map<V, List<K>>,其中每个键值对表示V和对应的K列表。这在某些场景下可能会很有用,比如根据值查找对应的键。

腾讯云提供了丰富的云计算产品和服务,例如云服务器、云数据库、云存储等。您可以根据具体需求选择适合的产品。更多关于腾讯云的产品和服务信息,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java8 用 Stream 快速实现ListMap 、分组、过滤等操作

这篇文章主要介绍了java8快速实现Listmap 、分组、过滤等操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 利用java8...里面的对象元素,以某个属性来分组,例如,以id分组,id相同的放在一起: //List 以ID分组 Map> Map>...Map id为key,apple对象为value,可以这么做: /** * List -> Map * 需要注意的是: * toMap 如果集合对象有重复的key,会报错Duplicate key...*  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 */ Map appleMap = appleList.stream()....collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1)); 打印appleMap {1=Apple{id=1, name='苹果1', money

21.6K11

Java集合框架知识整理

extends V> m),指定的Map集合添加到本的Map集合当中 Set keySet(),获取本Map集合中的所有key值,并以Set接口的结果作为返回 Collection values...extends V> function),Java8新增的使用Lambda的方式遍历替换Map中的元素的默认接口方法 default V putIfAbsent(K key, V value),Java8...即删除操作需要满足给定的值需要和map中的值相等的条件 default boolean replace(K key, V oldValue, V newValue),Java8新增的默认接口方法,替换给定...extends V> remappingFunction),Java8新增的默认接口方法,Lambda表达式中的结果值存放到Map中,如果计算的新值为null则返回null,且移除以前有的key和value...extends V> remappingFunction),Java8新增的默认接口方法,新计算的值覆盖Map中原key对应的value值 SortedSet接口中的额外抽象方法 Comparator

57720
领券