【问题标题】:Can stream 'map' be used for such processing?流“地图”可以用于此类处理吗?
【发布时间】:2015-09-15 18:37:16
【问题描述】:

这可以使用 Stream|Map 来完成,这样我就不需要将结果放在外部 HashMap 中,而是使用 .collect(Collectors.toMap(...)); 收集结果?

Map<ReportType, Long> rep = new HashMap<>(); // result is here
Arrays.stream(rTypes).forEach(r -> rep.put(r.reportType, r.calcValue()));

r.calcValue() 计算新结果的位置,然后将其放置在地图中。

【问题讨论】:

    标签: java dictionary java-8 java-stream


    【解决方案1】:

    当然,您可以在此处使用Collectors#toMap()。假设rTypes 包含Report 实例:

    Map<ReportType, Long> rep = Arrays.stream(rTypes)
      .collect(Collectors.toMap(Report::getReportType, Report::calcValue));
    

    (你确实有一个getReportType方法,对吧?:)

    【讨论】:

    • 请注意,如果您在此处有任何重复的报告类型,这将失败并出现 IllegalStateException。 (您的原始示例会默默地让一个条目覆盖另一个条目。)
    • @SamLindsay-Levine 这是真的。另一种解决方案是使用Collectors#groupingBy() 而不是toMap()
    【解决方案2】:

    是的,可以这样做,假设r.calcValue()返回一个Long

    Map<ReportType, Long> rep = Arrays.stream(rTypes)
                          .collect(Collectors.toMap(r -> r.reportType, r -> r.calcValue()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2018-02-26
      • 2012-06-07
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多