2015-06-11 6 views
7

Vielleicht ein normal Schleife zu wiederholen ist nach wie vor der richtige Weg, aber ich wollte sehen, ob es eine prägnante Art und Weise ist es 8 in Java zu tunJava 8 Weg, um einen Codeblock x-mal

for (int i = 0; i < LIMIT; i++) { 
    // Code 
} 

Gibt es einen mehr Java-Weg, dies zu tun? Ich brauche nicht wirklich, ich muss nur x mehrmals wiederholen.

Danke, Nathan

+3

'IntStream.range(). ForEach()' wird tun. – Voo

+1

http://stackoverflow.com/questions/18532488/does-java-8-provide-a-good-way-to-repeat-a-value-or-function?rq=1 vielleicht das? –

+1

Siehe auch ["So erstellen Sie nette Iterationen in Java 8"] (http://stackoverflow.com/q/27779568/2711488) – Holger

Antwort

11

Die beste Weise, die ich, wie diese so etwas wie IntStream.range(0, LIMIT).forEach($ -> code) wäre zu tun, zu sehen.

+0

Könnten Sie erklären, warum Sie Dollarzeichen für den Bezeichner verwenden? Ist es eine Konvention, '$' zu verwenden, wenn es nicht verwendet wird? Auch könnte dies jemals einen Konflikt verursachen (aus dem gleichen Grund wird $ usage in Bezeichnern verwarnt) – swalog

+1

@swalog In anderen Sprachen wird '_' verwendet, um unbenutzte Parameter zu kennzeichnen, aber das ist in Java nicht erlaubt, also wählen Sie einfach was du willst. Ich bin nicht der Einzige, der es benutzt (siehe Peters Antwort), aber ich bezweifle, dass es ein weit verbreitetes Idiom gibt. Der Compiler verwendet '$' für innere Klassen (kein Risiko dort), einige spezielle Felder wie '$ assertionsDisabled' und vermutlich (nicht überprüfte) Methoden, die aus Lambdas erzeugt werden (wieder kein Risiko). Wählen Sie, was Sie wollen. – Voo

+0

Sie werden viel tun, wenn der 'code', der in der Lambda-Funktion aufgerufen wird, checked exception auslöst. Sie können keine überprüfte Ausnahme in Java8 Lambda werfen. – Shubham

5

Einer der Gründe für die Verwendung von IntStream ist das Hinzufügen von Parallelismus, vorausgesetzt, Sie verstehen die Auswirkungen.

IntStream.range(0, LIMIT).parallel().forEach($ -> { 
    // some thing thread safe. 
});