Вывести результат среднего IntStream - PullRequest
0 голосов
/ 01 октября 2018

В настоящее время я изучаю потоки и использую функцию .average, чтобы вычислить среднее значение некоторых целых чисел, которые вводятся с помощью сканера.Проблема, с которой я сталкиваюсь, заключается в том, как отформатировать вывод, чтобы он не говорил необязательный double.

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ClassAverage {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    List<Integer> grades = new ArrayList<Integer>();

    while (scan.hasNextInt()) {
        grades.add(scan.nextInt());

        if (scan.equals("end")) {
            {
                break;
            }

        }
        grades.forEach(System.out::println);

    }

    System.out.println("" + grades.stream()
            .mapToInt(Integer::intValue)
            .average());

}
}

Это вывод, который я получаю

 OptionalDouble[88.0]

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете использовать orElse, чтобы получить действительное значение double, заключенное в OptionalDouble.

Таким образом, вы также определите значение по умолчанию, когда Optionalпусто (в данном случае я использовал 0.0):

System.out.println("" + grades.stream()
        .mapToInt(Integer::intValue)
        .average()
        .orElse(0.0)
);
0 голосов
/ 01 октября 2018

average() возвращает объект OptionalDouble, а не double.

Если вам нужно выполнить одно действие над результатомКак и при печати, вы можете использовать ifPresent​(DoubleConsumer):

grades.stream()
        .mapToInt(Integer::intValue)
        .average()
        .ifPresent(System.out::println);

В противном случае,

OptionalDouble optionalAverage = grades.stream()
        .mapToInt(Integer::intValue)
        .average();

if (optionalAverage.isPresent()) {
    double average = optionalAverage.getAsDouble();
    System.out.println(average);
}
...