Ich entdecke Java gerade neu (in letzter Zeit viel mit Ruby), und ich liebe die Überprüfung der Kompilierung von allem. Es macht das Refactoring so einfach. Allerdings vermisse ich es, schnell mit Typen zu spielen, um eine each
-Schleife zu machen. Das ist mein schlimmster Code.
Ist das so kurz wie möglich? Ich habe eine Sammlung namens looperTracks
, die Instanzen enthält, die Looper
implementieren. Ich möchte diese Sammlung nicht ändern, aber ich möchte ihre Mitglieder PLUS die this
durchlaufen (die auch Looper
implementiert).
Ich bin besonders besorgt über alle Funktionen, die Java seit 1.5 neu sind, die ich vielleicht verpasst habe. Für diese Frage frage ich nicht nach JRuby oder Groovy obwohl ich weiß, dass sie dafür arbeiten würden.
Bearbeiten: Entschuldigung (zu viel Ruby!) ... looperTracks
hat den Typ LooperTrack[]
und LooperTrack
implementiert Looper
.
Es gibt mindestens zwei Möglichkeiten, den Code zu verkürzen:
Sie können verwenden Collection.addAll (Collection) , die jedes Element in der Sammlung als Parameter an das Ende der Sammlung anfügt.:
%Vor%oder Sie können einen Konstruktor verwenden, der eine Auflistung als Parameter verwendet:
%Vor%Aufgrund der Änderung der Frage: Alle Arrays können leicht in Sammlungen umgewandelt werden, indem java.util.Arrays z
%Vor%Dadurch wird das Array in eine Liste fester Größe eingeschlossen.
Sie könnten zumindest die Tatsache verwenden, dass Sie eine Sammlung erstellen können, indem Sie eine andere als Basiswerte verwenden. Laut den Dokumenten :
Erstellt eine Liste mit den Elementen der angegebenen Sammlung in der Reihenfolge, in der sie vom Iterator der Sammlung zurückgegeben werden. Die ArrayList-Instanz hat eine Anfangskapazität von 110% der Größe der angegebenen Sammlung .
Was bedeutet, dass es wahrscheinlich Platz für this
gibt, ohne dass eine Größenänderung vorgenommen werden muss.
Ich habe gerade einen Iterator von Iterable implementiert (er wird in einer robusteren / getesteten / überprüften Weise implementiert durch Guava Iterables.concat(Iterable...)
):
mit Ihrem Code wird:
%Vor%falls Sie sich darum kümmern, dass die Implementierung Teil meiner Dollar-Bibliothek ist (releasad als LGPL3).
Ist es eine Voraussetzung, dass Sie alles zu einer Liste zusammenstellen? Wenn nicht, was ist daran falsch?
%Vor% Sie können versuchen, ein unveränderbare Liste mit der Methode nCopies()
. Zitat aus der API-Referenz,
public static <T> List<T> nCopies(int n, T o)
Liefert eine unveränderbare Liste bestehend aus von n Kopien des angegebenen Objekts. Das neu zugeordnete Datenobjekt ist winzig (es enthält eine einzige Referenz zum Datenobjekt). Diese Methode ist nützlich in Kombination mit dem List.addAll-Methode zum Erstellen von Listen. Das Die zurückgegebene Liste ist serialisierbar.
Dies wird die erste foreach Iteration vermeiden.
Ich werde das hier einfach rauswerfen, aber versuchen Sie nicht, Ihren Code kürzer zu machen, auf Kosten des Lesens.
Lesbarer Code ist immer mein Ziel, wenn ich mit dem Schreiben von Code anfange, einfach weil ich weiß, dass irgendwann selbst oder jemand anderes sich das anschauen und es verstehen muss.
Tags und Links java syntax collections