2015-06-11 18 views
7

Może normalnej pętli wciąż jest właściwa droga, ale chciałem zobaczyć, czy istnieje bardziej zwięzły sposób to zrobić w java 8.Java 8 sposób, aby powtórzyć blok kodu x razy

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

Czy jest to więcej sposób na java 8. Naprawdę nie potrzebuję po prostu powtarzać coś x wiele razy.

Dzięki Nathan

+3

'' IntStream.range(). ForEach() 'zrobi. – Voo

+1

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

+1

Zobacz także ["Jak tworzyć ładne wersje w języku Java 8"] (http://stackoverflow.com/q/27779568/2711488) – Holger

Odpowiedz

11

Najlepszym sposobem widzę, w jaki sposób zrobić to byłoby coś podobnego IntStream.range(0, LIMIT).forEach($ -> code).

+0

Czy możesz wyjaśnić, dlaczego używasz znaku dolara do identyfikatora? Czy to konwencja używać '$', gdy jest nieużywana. Co więcej, może to spowodować konflikt (z tego samego powodu, gdy ostrzegane jest użycie '$' w identyfikatorach) – swalog

+1

@swalog W innych językach '_' służy do oznaczania nieużywanych parametrów, ale to nie jest dozwolone w Javie, więc po prostu wybierz czego chcesz. Nie jestem jedynym, który go używa (patrz odpowiedź Petera), ale wątpię, by był jakikolwiek szeroko rozprzestrzeniony idiom. Kompilator używa '$' dla klas wewnętrznych (bez ryzyka), kilku specjalnych pól, takich jak '$ assertionsDisabled' i prawdopodobnie (nie sprawdzonych) metod utworzonych z lambdas (znowu nie ma tam ryzyka). Wybierz, co chcesz. – Voo

+0

Zrobisz dużo, jeśli "kod" wywołany w funkcji Lambda rzuci sprawdzany wyjątek. Nie można rzucić zaznaczonego wyjątku w Java8 Lambda. – Shubham

5

Jednym z powodów użycia IntStream jest dodanie równoległości, zakładając, że rozumiesz jej wpływ.

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