java - 如何使用 Java 8 Stream 拆分字符串并将所有信息分组到具有重复值的映射中?

标签 java java-8 java-stream

我有以下字符串:

"id1:name1,id2:name1,id3:name2,id4:name2,id5:name2"

我想将此字符串转换为以下形式的 map :

{name2=[id3, id4, id5], name1=[id1, id2]}

我的要求和这个问题一样:How to split a string into a map with a list of values?但是,如何使用 Java 8 Stream API 做到这一点?

最佳答案

根据您正在寻找流解决方案的标签。这是一个

String text = "id1:name1,id2:name1,id3:name2,id4:name2,id5:name2";
Map<String, List<String>> map = Arrays
        .stream(text.split(","))
        .map(pair -> pair.split(":"))
        .collect(Collectors.groupingBy(
                    pair -> pair[1], 
                    Collectors.mapping(e -> e[0], Collectors.toList())
                )
        );

System.out.println(map);

输出:{name2=[id3, id4, id5], name1=[id1, id2]}

关于java - 如何使用 Java 8 Stream 拆分字符串并将所有信息分组到具有重复值的映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344276/

相关文章:

java - 异常的合并排序失败

java - IntelliJ 看不到错误,但编译器在使用 RX 和 lambda 时看到错误?

java - 具有内部 ImmutableList 的映射的嵌套 groupingBy?

Java 8 Stream 确定文本文件中的最大计数

java - 有没有一种轻量级的方法可以在Java 9+中添加安全点

Java JFrame 对话框问题

java - 是否可以模拟私有(private)方法的结果并同时获得声纳或 jacoco 的覆盖?

java - 获取另一个Java进程的工作目录

hibernate - 从 3 迁移到 Hibernate 5

Java 8 流合并内部流结果到上面的流