Как округлить среднее в потоке Java? - PullRequest
1 голос
/ 25 сентября 2019

Я хочу вычислить среднее значение из списка целых чисел, а затем округлить результат до половины (т.е.> = .5 округляется до ближайшего целого числа вверх, а <.5 округляется до ближайшего целого числа вниз).Как мне сделать это с потоком Java? </p>

public static void main(String [] args){
    List<Integer> values = new ArrayList<>();
    values.add(60);
    values.add(30);
    values.add(20);

    double avg = values.stream().mapToInt(a -> a).average().getAsDouble();

    System.out.println(avg);
}

Я надеялся на что-то вроде

...average().round(RoundingMode.HALF_UP).getAsInt();

Ответы [ 3 ]

4 голосов
/ 25 сентября 2019

Ваша цель - округлить результат, а не значения внутри самого потока.Так что просто подождите, пока у вас не получится двойное число, затем округлите это значение до Math.round(), заменив это:

System.out.println(avg);
// output: 36.666666666666664

на это:

System.out.println(Math.round(avg));
// output: 37
0 голосов
/ 25 сентября 2019

как насчет округления , что удваивается ??

avg = Math.round(avg);
System.out.println(avg);

0 голосов
/ 25 сентября 2019

Это будет работать Java 9 и далее;

double avg = values.stream().mapToInt(Integer::intValue)
                .average()
                .stream()
                .map(Math::round)
                .findFirst()
                .orElse(0);
...