Diciamo che voglio vedere se un oggetto esiste in uno stream e se non è presente, lanciare un'eccezione. Un modo ho potuto fare che sarebbe utilizzando il metodo orElseThrow
:Lanciare un'eccezione se è presente un <> opzionale
List<String> values = new ArrayList<>();
values.add("one");
//values.add("two"); // exception thrown
values.add("three");
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.orElseThrow(() -> new RuntimeException("not found"));
Che dire in contrario? Se voglio un'eccezione se una partita viene trovato:
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.ifPresentThrow(() -> new RuntimeException("not found"));
ho potuto solo memorizzare il Optional
, e fare la isPresent
controllo dopo:
Optional<String> two = values.stream()
.filter(s -> s.equals("two"))
.findAny();
if (two.isPresent()) {
throw new RuntimeException("not found");
}
Esiste un modo per raggiungere questo obiettivo ifPresentThrow
sorta di comportamento? Sta provando a buttare in questo modo una cattiva pratica?
il punto di 'orElseThrow' è quello di convertire il valore a un non-optional con la gestione degli errori se il valore non esiste. Poiché tutto ciò che ti interessa è se il valore esiste, perché non utilizzare il metodo progettato per questo scopo: 'isPresent'? –