Ich habe den folgenden Code blasen. Ich habe versucht, einen Weg zu finden, um die if (something.isPresent())
Zeile zu vermeiden und die Optional<Something> something
auch zu deklarieren. Stattdessen möchte ich die Optional.orElse()
Methode verketten und das Ergebnis direkt zurückgeben. Aber ich kann keinen Weg finden, da die Methode null zurückgeben muss, wenn das Element nicht gefunden wurde, und wenn es gefunden wurde, muss es eine Methode aufrufen, bevor es zurückkehrt.Wie verwendet man oderElse, wenn Sie eine Methode für das Ergebnis aufrufen müssen?
Gibt es einen besseren Weg, es zu tun?
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OrElseWhat {
private class Something {
private String it;
Something(String it) { this.it = it; }
String getIt() { return it; }
}
private List<Something> somethings = new ArrayList<Something>() {
{
add(new Something("one"));
add(new Something("two"));
add(new Something("three"));
}
};
public String getFourOrNull() {
Optional<Something> something = somethings.stream()
.filter(s -> s.getIt().equals("four"))
.findAny();
if (something.isPresent()) {
return something.get().getIt();
}
return null;
}
}
Großartig! Ich dachte, die Karte würde eine NPE bekommen, aber ich denke, sie haben auch darüber nachgedacht :) – uzilan