java - 如何将字符串数组分组到 map ?

标签 java java-8 grouping java-stream collectors

我在过去的几个小时里尝试了两个修复这个小问题。 我想使用以下方法读取 txt 文件:

Stream<String> stream = Files.lines(Paths.get(fileName))

输入看起来像:

b -> l;
c -> a;
a -> d;    
c -> l; 

现在我想像这样映射它。

{a,=d, b=l, c=[a,l]}

我尝试使用 java Stream API 来做到这一点:

stream.map(x->x.split(" -> ")).collect(Collectors.toMap(x->x[0], 

x->x[1]));

问题是如果我有重复的键,toMap 会抛出异常。

有没有办法允许重复的键并将值存储在列表中?

最佳答案

您需要做的就是使用带有适当映射的 groupingBy 。

Map<String, Set<String>> result = list.stream().map(it -> it.split(" -> ")).
  collect(Collectors.groupingBy(t -> t[0], 
   Collectors.mapping(strings -> strings[1], Collectors.toSet())));

关于java - 如何将字符串数组分组到 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39944733/

相关文章:

jakarta-ee - Jersey:在不使用 web.xml 文件的情况下禁用 OPTIONS 请求的自动 Wadl 生成?

java - Java 8 数组构造函数引用如何工作?

algorithm - 二维位图邻居分组

python - NumPy:通过将一列中的值按另一列值分组来创建 dict()

java - 如何捕获 'Unsupported major.minor version'错误?

java - 生菜RedisCodec数字

java - 如何使用 Java8 lambda 以相反的顺序对流进行排序?

java - Hibernate - 多对多 - 带有常量表

java - 简单教程示例(lambda 表达式)不运行

scala - 将 Scala Int 列表分组为不同的间隔?