Gibt es einen allgemeinen besten Ansatz für var-arg Methode Signaturen in Bezug auf die Java 8 Lambda/Closure?Java-Methodensignaturen: Stream versus Collection vs. var-arg
In einer Situation, wo ein Verfahren entweder mit einem einzelnen Objekt als Parameter oder eine Sammlung von Objekten dieses Ich sehe drei Möglichkeiten zu erkennen, verwendet wird:
istprivate void optionOneVararg(String... params) { ... }
private void optionTwoCollection(Collection<String> params) { ... }
private void optionThreeStream(Stream<String> params) { ... }
Die String-Klasse offensichtlich als Beispiel verwendet.
Gibt es einen allgemein gültigen "Best Practice" -Ansatz? Der Vararg-Ansatz erzeugte den schlauesten Code bis zu Java 7. Bei Streams fühlt es sich plump an.
Ich möchte in der Lage sein, die Bequemlichkeit von Lambda sowohl innerhalb der Methode als auch außerhalb zu verwenden, wo ich es nenne. Ich möchte auch den Umwicklungs-/Klebstoffcode (z. B. Collections.singletonList(element)
oder Arrays.asList(element)
) auf ein Minimum beschränken und vermeiden, Collection myCollection = stream.collect(...)
gefolgt von myCollection.stream()
zu verwenden.
Was magst du an der Vararg-Option nicht? – assylias
Im var-args-Thema sollten Sie sich [diese Frage] ansehen (http://stackoverflow.com/questions/766559/when-do-you-use-varargs-in-java). – Paul
@assylias Wenn ich Operationen für einen Stream verwende (z. B. Filter), das Ergebnis an meine Funktion weitergebe und dann mehr Stream-Operationen für diesen Parameter verwende, benötigt das vararg-Array eine Erfassung des ersten Streams, bevor es an die Funktion übergeben werden kann . – SebastianH