resultado de la impresión de IntStream promedio

Michael Fogarty:

Actualmente estoy aprendiendo sobre los arroyos y estoy usando la función .average de averiguar el promedio de algunos números enteros que se introducen utilizando el escáner. El problema que estoy corriendo en es cómo dar formato a la salida para que no dice doble opcional.

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());

}
}

Esta es la salida que estoy recibiendo

 OptionalDouble[88.0]
Andrew Tobilko:

average()devuelve un OptionalDoubleobjeto, no una double.

Si usted tiene una sola acción a realizar sobre el resultado, al igual que imprimirlo, se puede utilizar ifPresent​(DoubleConsumer):

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

De otra manera,

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

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179622&siteId=1
Recomendado
Clasificación