【问题标题】:Collecting Statistics in Java8在 Java8 中收集统计信息
【发布时间】:2018-09-20 10:06:22
【问题描述】:

我想对一组数据进行分组后进行统计,但不知道是否可以

Map<String, DoubleSummaryStatistics> menuStatistics =

                menuPrices.parallelStream()
                        .collect(Collectors.groupingBy(cp -> dt1.format(cp.getUpdateDate())),
                                Collector.of(DoubleSummaryStatistics::new));

因为我有一些编译问题:

Multiple markers at this line
    - The method of(Supplier<R>, BiConsumer<R,T>, BinaryOperator<R>, Collector.Characteristics...) in the type Collector is not applicable for the arguments 
     (DoubleSummaryStatistics::new)
    - The constructed object of type DoubleSummaryStatistics is incompatible with the descriptor's return type: R

【问题讨论】:

  • 试试这个menuPrices.parallelStream() .collect(Collectors.groupingBy(cp -&gt; dt1.format(cp.getUpdateDate()), Collectors.summarizingDouble(YourClass::someProperty)));

标签: java lambda java-8 functional-programming java-stream


【解决方案1】:

您需要使用Collectors.summarizingDouble(),假设您的类(Stream 的元素类型)有一些您要计算统计信息的double 属性:

Map<String, DoubleSummaryStatistics>
    menuStatistics =
        menuPrices.parallelStream()
                  .collect(Collectors.groupingBy(cp -> dt1.format(cp.getUpdateDate()),
                           Collectors.summarizingDouble(cp -> cp.getSomeDoubleValue())));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多