1.Lambda

1.1.定义

Lambda是一个匿名函数,我们把Lambda表达式理解为是一段可以传递的代码。

1.2.基础语法

JAVA8引入了一个新的操作符号”->”,该操作符成为箭头操作符或Lambda操作符。

箭头操作符将Lambda表达式拆为了两个部分: 左侧:Lambda表达式的参数列表。 右侧:Lambda表达式的所需执行的功能,即Lambda体。

1.2.1.语法格式一

无参数,无返回值。
() -> System.out.println("xxxxx")

1.2.2.语法格式二

有一个参数,无返回值。
(t) -> System.out.println(t)

1.2.3.语法格式三

若只有一个参数,小括号可以省略不写。
t -> System.out.println(t)

1.2.4.语法格式四

有两个以上的参数,有返回值,并且Lambda体中有多条语句。

  1. Comparator<Integer> com = (x, y) -> {
  2. System.out.println("函数式接口");
  3. return Integer.compare(x, y);
  4. }

1.2.5.语法格式五

若Lambda体中只有一条语句,return和大括号都可以省略不写。
Comparator<Integer> com = (x, y) -> Integer.compare(x, y)

1.2.6.语法格式六

参数列表的数据类型可以忽略不写,因为JVM编译器通过上下文推断出数据类型,即“类型推断”。
(Integer x, Integer y) -> Integer.compare(x, y)

1.3.函数式接口

只有一个抽象方法的接口。 可以使用@FunctionalInterface修饰,检查是否函数式接口。

Lambda表达式需要“函数式接口”的支持。

1.4.练习题

  1. 调用 Collertions.sort() 方法,通过定制排序比较两不 Emplovee (先按年龄比,年龄相同按姓名比),使用 Lambda 作为参数传递。
  2. a.声明函数式接口,接口中声明抽象方法,public string getvalue(string str);

b.声明类Testlambda,类中编写方法使用接口作为参数,将一个字符串转换成大写,并作为方法的返回值。
c.再将一个字符串的第2个和第4个索引位置进行截取子串。,

  1. a.吉明一个带两个泛型的两数式接口,泛型类型为丁 为参数,R 为返回值。

b.接口中声明对应抽象方法。
c.在 Testlambda 类中声明方法,使用接口作为参数,计算两个long 型参数的和。
d.再计算两个long 型参数的乘积。