Java中有参数传递时的Lambda表达式及其省略:Arrays.sort(...)中Comparator接口的Lambda表达式实现

public class RedVelvet {
    private String name;
    private int age;

    public RedVelvet(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "RedVelvet{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class DemoLambda {
    public static void main(String[] args) {
        RedVelvet[] rv = {
                new RedVelvet("Seulgi", 26),
                new RedVelvet("Irene", 30),
                new RedVelvet("Wendy", 26)
        };

        System.out.println(Arrays.toString(rv));

        //用匿名内部类Comparator对rv中的年龄排序
        Arrays.sort(rv, new Comparator<RedVelvet>() {
            @Override
            public int compare(RedVelvet o1, RedVelvet o2) {
                return o1.getAge() - o2.getAge();
            }
        });

        //用Lambda表达式,编译器自动识别
        Arrays.sort(rv, (RedVelvet o1, RedVelvet o2) -> {
            return o1.getAge() - o2.getAge();
        });

        //更简化的Lambda表达式
        Arrays.sort(rv, ((o1, o2) -> o1.getAge() - o2.getAge()));
        System.out.println(Arrays.toString(rv));

    }
}

下面是自定义接口的Lambda表达式的实现
给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和

public interface Calculator {
    public abstract void calc(int a, int b);
}
public class DemoCusLambda {
    public static void main(String[] args) {
        //匿名内部类
        invokeCalc(10, 20, new Calculator() {
            @Override
            public int calc(int a, int b) {
                return a + b;//30
            }
        });

        //Lambda表达式
        invokeCalc(100, 800, (a, b) -> {
            return a + b; //900
        });

        //Lambda表达式
        invokeCalc(120, 130, (a, b) -> a + b);//250
    }

    //另外定义一个函数,参数是两个int类型的和一个Calculator接口
    public static void invokeCalc(int a, int b, Calculator cc) {
        int sum = cc.calc(a, b);
        System.out.println(sum);
    }
}

你可能感兴趣的:(Java初级进阶)