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 OptionalDouble
objeto, 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);
}