JDK新特性Lambda表达式(含源码)

Lambda标准格式

Lambda省去面向对象的条条框框,格式由3个部组成:

一些参数

一个箭头

一段代码

Lambda表达式的标准格式为:

(参数类型 参数名称) ‐> { 代码语句 }

格式说明:

小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔

->是新引入的语法格式,代表指向动作

大括号内的语法与传统方法体要求基本一致

练习:使用Lambda标准格式(无参无返回)

题目

给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。如下:

public interface Cook {

void makeFood();

}

在下面的代码中,请使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样:

public class Demo05InvokeCook {

public static void main(String[] args) {

// TODO 请在此使用Lambda【标准格式】调用invokeCook方法

}

private static void invokeCook(Cook cook) { cook.makeFood();

}

}

解答

public static void main(String[] args) {

invokeCook(() ‐> {

System.out.println("吃饭啦!");

});

}

Lambda的参数和返回值:

下面举例演示java.util.Comparator<T>接口的使用场景代码,其中的抽象方法定义为:

public abstract int compare(T o1, T o2);

当需要对一个对象数组进行排序时, Arrays.sort方法需要一个Comparator接口实例来指定排序的规则。假设有一个Person类,含有String name和int age两个变量。

public class Person {

private String name;

private int age;

// 省略构造器、toString方法与Getter Setter

}

传统写法:

import java.util.Arrays; import java.util.Comparator;

public class Demo06Comparator {

public static void main(String[] args) {

// 本来年龄乱序的对象数组

Person[] array = {

new Person("古力娜扎", 19),

new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };

// 匿名内部类

Comparator<Person> comp = new Comparator<Person>()

@Override

public int compare(Person o1, Person o2) { return o1.getAge() ‐ o2.getAge();

}

};

Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例

for (Person person : array) { System.out.println(person);

}

}

}

public class Demo06Comparator {

public static void main(String[] args) {

// 本来年龄乱序的对象数组

Person[] array = {

new Person("古力娜扎", 19),

new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };

// 匿名内部类

Comparator<Person> comp = new Comparator<Person>()

@Override

public int compare(Person o1, Person o2) { return o1.getAge() ‐ o2.getAge();

}

};

Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例

for (Person person : array) { System.out.println(person);

}

}

}

Lambda写法:

import java.util.Arrays;

public class Demo07ComparatorLambda { public static void main(String[] args) {

Person[] array = {

new Person("古力娜扎", 19),

new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };

Arrays.sort(array, (Person a, Person b) ‐> {

return a.getAge() ‐ b.getAge();

});

for (Person person : array) { System.out.println(person);

}

}

}

猜你喜欢

转载自blog.csdn.net/itcast_cn/article/details/88111120