Der Vorteil, den Strom Ansatz über den Imperativ Ansatz besteht darin, dass, wenn es keine Elemente in dem Array sind arr
dann stellen wir den Maximalwert als abwesendeinen fehlenden Wert anzuzeigen.
in Bezug auf diese Beschreibung, die Sie erwähnt haben:
Gemäß der Definition von OptionalInt, wenn der Wert, falls vorhanden gibt es getasIntValue(), aber wenn der Wert nicht vorhanden ist, wirft es Ausnahme.
Beachten Sie, dass es eine Ausnahme nur wirft, wenn Sie getAsInt() direkt von einem optionalen Ergebnis nennen, und der Wert ist abwesend.
Dies ist eine gute Sache in dem Sinne, dass, wenn wir versuchen, auf das Element mit getAsInt() zugreifen, wie Sie erwähnt haben, und es keinen Wert vorhanden ist, wird eine NoSuchElementException
geworfen und tatsächlich eine Ausnahme erhalten, in diesem Fall , könnte nützlich sein, weil Sie jetzt wissen, dass kein Wert vorhanden ist, während der imperative Ansatz dazu führen könnte, einen Fehler zu verstecken, denn wenn das Array leer ist, ist der Maximalwert 0
, was falsch ist, außer in einem bestimmten Szenario in meinem vorletzten Absatz unten.
Solcher, kleiner Code, wie Sie gezeigt haben, wird wahrscheinlich leicht zu beheben sein, wenn es einen Fehler gibt, aber im Produktionscode, kann es schwierig sein, wegen der Größe der Codebasis zu finden.
wenn 0
ist in der Tat wollen der Standard Sie bieten, wenn das Array leer ist, dann können Sie mit dem Imperativ Ansatz vorgehen oder den optionalen Ansatz es getan werden könnte wie:
int max = IntStream.of(arr).max()
.orElse(0);
Im obigen Szenario wird die NoSuchElementException
Ausnahme nicht ausgelöst. Außerdem würde ich empfehlen, getAsInt() nicht direkt von einem optionalen Ergebnis zu verwenden, es sei denn, Sie sind 100% sicher, dass das Array nicht leer ist. Verwenden Sie lieber orElse, orElseGet oder orElseThrow, je nachdem, welche Sie für die gegebene Situation am geeignetsten finden.
Ja, das stimmt. Ich habe eine große Codebasis, mehrere Liste oder Liste Typ werden immer gefüllt und wenn sie null sind, wollen wir im Grunde diese Liste oder Array zu können. Ich dachte, der beste Ansatz wäre 'Optional.ofNullable (Produktliste) .orElseThrow (e-> e.emptyList()). Stream.foreach (e-> e.getId());' –