【问题标题】:How to group stringarray to map?如何将字符串数组分组到映射?
【发布时间】:2016-10-09 14:31:43
【问题描述】:

在过去的几个小时里,我尝试了两次解决这个小问题。 我想使用以下命令从 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 流 API 来做到这一点:

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

x->x[1]));

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

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

【问题讨论】:

标签: java java-8 grouping java-stream collectors


【解决方案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())));

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多