Mam obiekt opcjonalny java, który chcę tylko uzyskać, jeśli jest obecny. Oczywistym jest kod tutaj:Opcjonalnie Java Get if Present
JsonGenerator gen;
if(value.isPresent()) {
gen.writeObject(value.get());
}
Ale chcę zobaczyć, czy mogę steamline że do 1 linii metodą ifPresent
. Nie chcę, żeby to było w ogóle, jeśli nie jest obecne. Próbowałem czegoś takiego:
gen.writeObject(value.ifPresent(a -> a));
Ale to najwyraźniej nie zadziałało. Czy jest jakiś sposób, aby zrobić to, co chcę? Wszystko, co badałem online, pokazuje tylko użycie ifPresent
z wywołaniem metody dla predykatu.
Edit 1: Próbowałem rozwiązanie Tunaki, ale otrzymuję następujący błąd:
Error:(25, 46) java: incompatible thrown types java.io.IOException in method reference
Oto mój cały blok kodu:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
value.getFooA().ifPresent(gen::writeObject);
}
}
Próbowałem nawet:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
try {
value.getContactInfo().ifPresent(gen::writeObject);
} catch(IOException e) {
throw new UncheckedIOException(e);
}
}
}
Ale nadal daje mi to błąd.
Próbowałem swoje rozwiązanie i got błąd , Dokonałem edycji mojego wpisu. – Richard
@Richard Ha tak, jeśli twoja metoda zgłasza sprawdzony wyjątek, musisz go złapać i ponownie wyrzucić niezaznaczoną (lub zrobić coś innego). – Tunaki
idealne, działało. Dzięki!! – Richard