如何将stringarray分组到地图?

时间:2016-10-09 14:31:43

标签: 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&GT; X [1]));

问题是如果我有重复的密钥,则map会抛出异常。

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

1 个答案:

答案 0 :(得分:1)

您需要做的就是使用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())));