Nach Effektive Java 2nd Ed, wenn Sie eine Methodensignatur schreiben möchten, die Varargs erlaubt, aber immer noch ein Element Minimum zur Kompilierzeit erzwingt, sollten Sie die Methodensignatur auf diese Weise schreiben :Java 8 streams und varargs
public void something(String required, String ... additional) {
//... do what you want to do
}
Wenn ich all diese Elemente streamen will, ich habe so etwas wie dies getan:
public void something(String required, String ... additional) {
Stream<String> allParams =
Stream.concat(Stream.of(required), Stream.of(additional));
//... do what you want to do
}
Das fühlt sich wirklich unelegant und verschwenderisch, vor allem, weil ich einen Strom von 1 bin die Schaffung und concatena Ting es mit einem anderen. Gibt es einen saubereren Weg, dies zu tun?
'Stream.concat' gut zu mir scheint .. .it ist kurz, prägnant, es erstellt keine Kopien der Daten. Sie erstellen ein paar zusätzliche Wrapper-Objekte, das ist alles. IMO ist wirklich nichts falsch daran. Programmieren Sie in Java, Sie müssen nur kleine Objekte für Dinge hier und da erstellen. 'Stream.concat' ist bereits Meilen vor dem Zusammenführen mit einer 'ArrayList' oder etwas ähnlichem. – Radiodef
Ich stimme Radiodef zu, wenn Sie wirklich wollten, könnten Sie Ihre eigene Implementierung von 'Spliterator' machen und sie mit 'StreamSupport.stream (spliterator, parallel) verwenden', aber ich fühle mich nicht so, das macht es lesbarer oder effizienter . –