【问题标题】:Converting List To Maps in Java 8在 Java 8 中将列表转换为地图
【发布时间】:2018-02-22 18:13:18
【问题描述】:

我正在加载一个日志文件作为输入流,需要对每一行的匹配值进行聚合处理,我还需要在 MultiMap 中保存行时存储重复项,我发现收集以下存储到 List 中的流时遇到问题如Multimap<String, List<String>>

try (Stream<String> stream = Files.lines(Paths.get(inFileName))) {
    List<String> matchedValues = stream
                    .flatMap(s -> MultiPatternSpliterator.matches(s, p1))
                    .map(r -> r.group(1))
                    .collect(Collectors.toList());

    matchedValues.forEach(System.out::println);
}

如何转换相同的值以将值存储在具有重复值的 Map 中。

【问题讨论】:

  • 您希望第 1 组作为键,所有组作为值吗?
  • 是的,模式匹配并从日志行获取值作为 ,我需要存储 Map, ) - TimeStamp 是键也是 List. 中的值
  • 您不想要Multimap&lt;String, String&gt; 还是List&lt;String, List&lt;String&gt;&gt;?我不明白为什么每个键需要多个 List
  • 在我的地图中,我需要存储 3 个值,其中 1 个值也是 Key,有关我上述评论的更多信息。
  • 是否 Map>> 也可以工作,那么您可以只使用标准 Java(外部列表在同一时间戳提供多个事件)

标签: functional-programming java-8 guava multimap collectors


【解决方案1】:

很难说出你真正想要什么,但鉴于你说你需要将 "log line as &lt;reTimeStamp, reHostName, reServiceTime&gt;" 存储为 "Map&lt;&lt;reTimeStamp&gt;, &lt;reTimeStamp, reHostName, reServiceTime&gt;"我会选择:

        Map<String, List<String>> matchedValues = stream
                .flatMap(MultiPatternSpliterator::matches)
                .map(r -> Arrays.asList(r.group(1), r.group(2), r.group(3)))
                .collect(Collectors.toMap(
                        groups -> groups.get(0),
                        Function.identity()));

如果键(即时间戳)可以重复,请使用(List)Multimap,它会为您提供每个键的列表:

        ListMultimap<String, List<String>> matchedValues = stream
                .flatMap(MultiPatternSpliterator::matches)
                .map(r -> Arrays.asList(r.group(1), r.group(2), r.group(3)))
                .collect(toImmutableListMultimap(
                        groups -> groups.get(0),
                        Function.identity()));

如果您显示一些示例输入和输出,我会更容易。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2021-12-22
    相关资源
    最近更新 更多