Вы можете расширить класс IntSummaryStatistics? - PullRequest
0 голосов
/ 02 мая 2019

Я использую статистику потока 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 ]

2 голосов
/ 06 мая 2019

Как я уже говорил в комментариях, я бы выбрал композицию, а не наследование. Это означает, что вы можете создать свой класс 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 голос
/ 02 мая 2019

Документация IntStream дает подсказку:

... Например, вы можете вычислить сводную статистику по потоку целых чисел с помощью:

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

Вы должны быть в состоянии сделать то же самое с IntSummaryStatisticsTest, то есть:

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

Но также учитывайте комментарий / решение Джейкоба (использование композиции, вероятно, было бы дажелучше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...