Как найти sumOfelements в массиве типов данных - PullRequest
0 голосов
/ 17 января 2019

У меня есть пользовательский класс

class StackInfo {
    int start, size, capacity;
}

и для проверки общего количества элементов, присутствующих в массиве такой информации, у меня есть

private int numberOfElements(StackInfo[] info) {
    int size = 0;
    for (StackInfo si : info) {
        size += si.size;
    }
    return size;
}

Я попытался преобразовать его с помощью потоков в следующее:

private int numberOfElements(StackInfo[] info) {
    return (int) Arrays.stream(info).map(s -> s.size).count();
    //       ^^ 
    //     to convert long
}

Но вывод для вышеуказанного кода также неверен и после приведения.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете использовать reduce операцию:

Arrays.stream(info).reduce((s1, s2) -> s1.size + s2.size);

Или sum, как показало @nullpointer:

Arrays.stream(info).mapToInt(StackInfo::getSize).sum();
0 голосов
/ 17 января 2019

Вы, похоже, ищете операцию sum, а не count, которая потребует от вас преобразования потока в IntStream в основном. Вы можете обновить свой код до:

private int numberOfElementsStream(StackInfo[] info) {
    return Arrays.stream(info)    // Stream<StackInfo>
            .mapToInt(sd -> sd.size)   //IntStream of their size
            .sum();   // sum of all
}
...