Zielony Smok - logo witryny

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.