您可以扩展IntSummaryStatistics类吗?

时间:2019-05-02 20:41:21

标签: java java-stream summary

我正在使用Java流统计信息,通过这种方式来提高速度:

IntSummaryStatistics intSummary = join.stream(). MapToInt (t> t.get0(). GetCNationkey ()). SummaryStatistics();
Long sumResult = intSummary.getSum ();

我想要一个新的类来构造一个新的getSum()方法。像这样:

IntSummaryStatisticsTest intSummarytest = join.stream (). MapToInt (t> t.get0 (). GetCNationkey ()). SummaryStatistics ();
Long sumResult = intSummarytest.getSumTest();

我试图创建一个新类:

public class IntSummaryStatisticsTest extends IntSummaryStatistics {}

IntSummaryStatisticsTest summa = join.stream().mapToInt(t->t.get0().getCNationkey()).summaryStatistics();

但是我遇到了这个错误:incompatible types required java. Required: IntSummaryStatisticsTest Found: java.util.IntSummaryStatistics

是否可以实现这种新的getSumTest()方法?

2 个答案:

答案 0 :(得分:2)

就像我在评论中指出的那样,我会选择继承而不是继承。这意味着您可以创建类IntSummaryStatisticsTest,并在构造函数中接受IntSummaryStatistics对象作为参数。您的课程如下所示:

class IntSummaryStatisticsTest {
    private final IntSummaryStatistics statistics;

    public IntSummaryStatisticsTest(IntSummaryStatistics statistics) {
        this.statistics = statistics;
    }

    public long getSumTest() {
        // return your value
    }
}

该类的用法如下:

var summary = new IntSummaryStatisticsTest(join.stream()
        .mapToInt(t -> t.get0().getCNationkey())
        .summaryStatistics());

System.out.println(summary.getSumTest());

答案 1 :(得分:1)

documentation of IntStream给出了一个提示:

  

...例如,您可以使用以下方法在整数流上计算摘要统计信息:

IntSummaryStatistics stats = intStream.collect(
    IntSummaryStatistics::new,
    IntSummaryStatistics::accept,
    IntSummaryStatistics::combine);

您应该可以对IntSummaryStatisticsTest执行相同的操作,即:

IntSummaryStatisticsTest stats = intStream.collect(
    IntSummaryStatisticsTest::new,
    IntSummaryStatisticsTest::accept,
    IntSummaryStatisticsTest::combine);

还要考虑Jacob的评论/解决方案(使用组合可能会更好)