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

Java-8:流如何将Map<K、List<D>>转换为Map<D、List<K>>

Java 8中,可以使用流来将Map<K, List<D>>转换为Map<D, List<K>>。下面是一个示例代码和解释:

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

public class Main {
    public static void main(String[] args) {
        // 创建一个示例的Map<K, List<D>>
        Map<String, List<Integer>> map = new HashMap<>();
        map.put("A", Arrays.asList(1, 2, 3));
        map.put("B", Arrays.asList(4, 5, 6));
        map.put("C", Arrays.asList(7, 8, 9));

        // 使用流将Map<K, List<D>>转换为Map<D, List<K>>
        Map<Integer, List<String>> resultMap = map.entrySet().stream()
                .flatMap(entry -> entry.getValue().stream()
                        .map(value -> new AbstractMap.SimpleEntry<>(value, entry.getKey())))
                .collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey,
                        Collectors.mapping(AbstractMap.SimpleEntry::getValue, Collectors.toList())));

        // 输出转换后的结果
        System.out.println(resultMap);
    }
}

在上面的示例代码中,首先创建了一个示例的Map<K, List<D>>,其中键为String类型,值为Integer列表。然后使用流对Map进行转换,flatMap操作将Map中的每个键值对转换成一个新的键值对,新的键为Integer类型,值为原来的键。最后使用collect操作将转换后的结果收集到一个新的Map<D, List<K>>中。

输出结果为:

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

这个转换操作适用于将一个包含多个键值对的Map转换为以原来的值为键,原来的键为值的新Map。这种转换在某些场景下很有用,比如需要通过值来查找对应的键。

腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云云数据库Redis版:高性能、可扩展、分布式的缓存数据库,适合处理大量高并发读写操作。
  2. 腾讯云云服务器CVM:弹性可扩展的云服务器,提供灵活的计算资源供应。
  3. 腾讯云对象存储COS:安全可靠的对象存储服务,适用于存储和传输各种类型的文件数据。
  4. 腾讯云无服务器云函数SCF:按需运行的事件驱动计算服务,无需管理服务器,高效灵活。
  5. 腾讯云人工智能平台AI Lab:提供丰富的人工智能服务和工具,助力开发者构建智能应用。
  6. 腾讯云物联网套件IoT Hub:物联网设备接入与管理平台,提供安全可靠的设备连接和数据通信。
  7. 腾讯云移动推送信鸽:实时、稳定的移动消息推送服务,支持多种推送场景和方式。

请注意,以上产品和链接仅作为示例,具体选择和推荐应根据实际需求和情况进行。

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

相关·内容

  • JDK8新特性详解Lambda&Stream

    2.13 并行与串行对比 2.14 使用并行的线程安全问题 3 stream技巧 3.1 数组集合 3.2 统计数组元素中的个数 1 Lambda 1.1 为什么使用lambda 1.2 lambda... parallel = Stream.of("1", "2").parallel(); 2.13 并行与串行对比 2.14 使用并行的线程安全问题 就是我们从数据库查询出list...就很容易解决这个问题,代码如下: String[] arr = {"a", "c", "a", "b", "d", "c"}; Map map = new HashMap...)); String[] arr = {"a", "c", "a", "b", "d", "c"}; Stream.of(arr) .collect(Collectors.toMap(k -...(k -> k, k -> 1, Integer::sum)这一部分可能不好理解,对于这里面的三个参数,第一个参数代表将arr中的每一个元素作为Map中的key,第二个参数代表每一个key所对应的value

    36610

    python3--基础综合测试

    C的if判断结尾没有冒号,直接print了,语句错误D是whlie循环,语句正确 8、若k为整形,下述while循环执 的次数为:(python3上执行了10次,此题应该是py2上的题目) k=1000...while k>1: print(k) k=k/2 A.9        B.10       C.11       D.100 选择:B 9、以下叙述正确的是: A、continue语句的作用是结束整个循环的执行...的转换 #tuple转换为list a = (1,2,3) b = list(a) #list换为tuple a = [1,2,3] b = tuple(a) 3、list和tuple有什么不同 list...只有数字和字符串类型,存在小数据池 小数据池的作用,就是节省内存 6、在Python3x版本中,s1 ='中国',如何将s1化成utf-8的bytes类型?...转化成功之后,得到了s2,如何将s2化成gbk的bytes类型(请写出具体代码) s1 ='中国' s2 = s1.encode(encoding='utf-8') #转化成utf-8的bytes类型

    1.2K10

    相信我,使用 Stream 真的可以让代码更优雅!

    基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作、三方登录、支付、短信、...); } 以上两个转换虽然写着还不算麻烦,但是每次都需要写一个循环,尤其在数组List的时候还需要使用一个临时数组,都会让人看着很不舒服,但是如果使用了stream就会大不一样,用stream实现了相同功能的代码如下...{"a", "c", "a", "b", "d", "c"}; Map map = new HashMap(); for (String s : arr) {     ...: String[] arr = {"a", "c", "a", "b", "d", "c"}; Map map = new HashMap(); for (String...(k, v) -> System.out.println(k + " : " + v)); 注意 在上面的代码中,Collectors.toMap(k -> k, k -> 1, Integer::sum

    25520

    Java8 Stream

    源操作:可以将数组、集合类、行文本文件转换成管道Stream进行数据处理 中间操作:对Stream中的数据进行处理,比如:过滤、数据转换等等 终端操作:作用就是将Stream管道流转换为其他的数据类型...= set.stream(); 首先,我们使用Stream()函数,将一个List换为管道 调用filter函数过滤数组元素,过滤方法使用lambda表达式,以L开头的元素返回true被保留,其他的...List元素被过滤掉 然后调用Map函数对管道中每个元素进行处理,字母全部转换为大写 然后调用sort函数,对管道中数据进行排序 最后调用collect函数toList,将管道流转换为List返回...方法将文本文件转换为管道,下图中的Paths.get()方法作用就是获取文件,是Java NIO的API。...Stream integerStream = list.parallelStream(); // 将已有的串行流转换为并行 Stream

    1.6K10

    Stream

    Stream再整理 Stream基本API使用 将数组转换为管道 将集合类对象转换为管道 将文本文件转换为管道 Stream的filter与谓语逻辑 什么是谓词逻辑?...(list); 首先,我们使用Stream()函数,将一个List换为管道 调用filter函数过滤数组元素,过滤方法使用lambda表达式,以L开头的元素返回true被保留,其他的List元素被过滤掉...然后调用Map函数对管道中每个元素进行处理,字母全部转换为大写 然后调用sort函数,对管道中数据进行排序 最后调用collect函数toList,将管道流转换为List返回 最终的输出结果是...:[LEMUR, LION] 将数组转换为管道 使用Stream.of()方法,将数组转换为管道。...看上文中第二段代码: 首先使用entrySet().stream() 将Map类型转换为Stream类型。

    3.8K20
    领券