Local-Variable Syntax for Lambda Parameters = Składnia zmiennej lokalnej dla parametrów lambda.
Źródło: https://openjdk.java.net/jeps/323
Dopuszczono używanie składni var
do użycia przy deklarowaniu formalnych parametrów niejawnie
typowanych wyrażeń lambda.
Przykładem takiego wyrażenia jest:
(x, y) -> x.process(y)
Aktualnie można stosować słowo var
.
(var x, var y) -> x.process(y)
Jeśli używamy var
dla jednego parametru musimy go użyć do wszystkich parametrów.
Konstrukcje typu
//(var x, y) -> x.process(y)
//(x, var y) -> x.process(y)
są niedopuszczalne.
Klasa MainLambdaParams
package lambdaparams; import java.util.ArrayList; import java.util.Arrays; import java.util.function.BiFunction; import java.util.function.IntBinaryOperator; import java.util.stream.IntStream; import java.util.stream.Stream; public class MainLambdaParams { public static final String[] values = {"Halina", "Bogusław", "Maria", "Piotr", "Anatol", "Jacek", "Alfred", "Elżbieta", "Antoni", "Bartłomiej", "Dominika", "Łucja", "Cyryl", "Metody", "Prokop", "Mikołaj", "Amelia", "Filip", "Olga"}; public static void main(String[] args){ BiFunction<Integer, Integer, Integer> a = (x, y) -> (x * y); System.out.println(a.apply(7, 8)); BiFunction<Integer, Integer, Integer> b = (var x, var y) -> (x * y); System.out.println(b.apply(7, 8)); //- final IntBinaryOperator intBinaryOperator = (int d, int e) -> d + e; final IntBinaryOperator intBinaryOperator1 = (var d, var e) -> d + e; //- //operacja wyszczególnienia elementów int[] tabl = {13, 11, 10, 2, 19, 6}; //nowa metoda 1 IntStream.of(tabl).forEach((int value) -> System.out.print(value + " ")); IntStream.of(tabl).forEach((var value) -> System.out.print(value + " ")); //- Stream<String> stream = Arrays.stream(values); ArrayList<String> strings = stream.collect(() -> new ArrayList<>(), (c, e) -> c.add(e), (c1, c2) -> c1.addAll(c2)); System.out.println(); print(strings); //- Stream<String> stream1 = Arrays.stream(values); var strings1 = stream1.collect(() -> new ArrayList<>(), (var c, var e) -> c.add(e), (var c1, var c2) -> c1.addAll(c2)); System.out.println(); print(strings1); //- Stream<String> stream2 = Arrays.stream(values); ArrayList<String> strings2 = stream2.collect(ArrayList::new, ArrayList::add, ArrayList::addAll); //- Stream<String> stream3 = Arrays.stream(values); var strings3 = stream3.collect(ArrayList::new, ArrayList::add, ArrayList::addAll); } public static <T> void print(ArrayList<T> array) { System.out.print("["); for(int i = 0; i < array.size(); i++){ if(i == array.size() - 1){ System.out.print(array.get(i)); } else{ System.out.print(array.get(i) + ", "); } } System.out.print("]"); System.out.println(); } }
Wynik
56 56 13 11 10 2 19 6 13 11 10 2 19 6 [Halina, Bogusław, Maria, Piotr, Anatol, Jacek, Alfred, Elżbieta, Antoni, Bartłomiej, Dominika, Łucja, Cyryl, Metody, Prokop, Mikołaj, Amelia, Filip, Olga] [Halina, Bogusław, Maria, Piotr, Anatol, Jacek, Alfred, Elżbieta, Antoni, Bartłomiej, Dominika, Łucja, Cyryl, Metody, Prokop, Mikołaj, Amelia, Filip, Olga]
Uwagi
Ostatnie dwie konstrukcje stream2 - strings2
oraz stream3 - strings3
są innym sposobem
zapisania wcześniejszych 2 konstrukcji – podałam je tylko dla ćwiczenia.