Jak stwierdziłem, iteracja za pomocą Stream działa dużo wolniej (74 slajdy nie są w tym przypadku brane pod uwagę). Myślę, że to nie jedyne wycieki wydajności w lambdach (zgadnijcie, że będzie to poprawione w przyszłości). Poniższy przykład działa z Java 8 bez żadnych opcji:
//Language is an enum
Language[] array = Language.values();
System.err.println(array.length); // 72 items
long t = System.nanoTime();
for (Language l : array) System.out.println(l.getLanguageName());
System.err.println(System.nanoTime()-t); //nano time 1864724
t = System.nanoTime();
Arrays.stream(array).forEach(v -> System.out.println(v.getLanguageName()));
System.err.println(System.nanoTime()-t); //nano time 55812625 (55812625/1864724 = 29.93 times longer)
List<Language> list = Arrays.asList(array);
t = System.nanoTime();
for (Language l : list) System.out.println(l.getLanguageName());
System.err.println(System.nanoTime()-t); //nano time 1435008
t = System.nanoTime();
list.forEach(v -> System.out.println(v.getLanguageName()));
System.err.println(System.nanoTime()-t); //nano time 1619973 (1619973/1435008 = 1.128 times longer)
Dlaczego nie tworzyć prostych obliczeń przy użyciu opcji Data dla każdego podejścia? – MGorgon
Czy zastanawiasz się nad tym, czym jest "zamknięcie Java 8"? Przynajmniej w oparciu o to pytanie (https://stackoverflow.com/questions/17204279/does-java-8-support-closures) takie rzeczy nie wydają się istnieć ... – awksp
@ user3580294 Prawdopodobnie nawet anonimowo wewnętrzne klasy tworzą zamknięcia, aczkolwiek w niezmiennym kontekście (zmiennym). Czy ktoś mógłby twierdzić, że Haskell nie ma zamknięć z powodu niezmienności wiązań? Ale w każdym razie ["Wyrażenia Lambda"] (http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html) będzie prawdopodobnie bardziej jasne w kontekście. – user2864740