Java >> Java tutorial >  >> Java

'OptionalDouble.getAsDouble()' uden afkrydsning 'isPresent()'

Jeg har set en masse løsninger på dette spørgsmål, men uanset hvad jeg prøver, rapporterer IDEA stadig en fejl.

Overvej følgende blok:

double testDouble= customClass.stream()
              .mapToDouble(CustomClass::getDouble)
              .max()
              .getAsDouble();

Dette rapporterer en advarsel om 'OptionalDouble.getAsDouble()' without 'isPresent()' check .

Hvis jeg prøver dette, kompilerer det ikke:

double testDouble= customClass.stream()
              .mapToDouble(CustomClass::getDouble)
              .max().orElseThrow(IllegalStateException::new)
              .getAsDouble();

Heller ikke dette:

double testDouble= customClass.stream()
              .mapToDouble(CustomClass::getDouble)
              .max().orElse(null)
              .getAsDouble();

Eller denne:

double testDouble= customClass.stream()
              .mapToDouble(CustomClass::getDouble)
              .max().isPresent()
              .getAsDouble();

Selvom jeg ved, at disse valgfrie fordoblinger aldrig vil være nul, vil jeg gerne løse dem, så der ikke er nogen advarsler.

Kan nogen påpege, hvor jeg tager fejl?

Svar

double testDouble= customClass.stream()
              .mapToDouble(CustomClass::getDouble)
              .max().orElseThrow(IllegalStateException::new)
              .getAsDouble();

orElseThrow returnerer en double , ikke en OptionalDouble . Der er ingen grund til at ringe til getAsDouble() .

double testDouble = customClass.stream()
    .mapToDouble(CustomClass::getDouble)
    .max().orElseThrow(IllegalStateException::new);

Java tag