Lambda表达式是Java SE8 中的 一个重要的新特性
Lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体
Lambda表达式还增强了集合库
在Lambad表达式中this是指外围实例,而匿名类中的this是指匿名类实例,
如果想在Lambda表达式里面修改外部变量的值,可以将变量定义为非局部变量,即为实例变量或者将变量定义为数组
Lambda表达式如果引用某局部变量,则直接将其视为final
1.Lambda表达式没有命名,用来像传递数据一样传递操作
2.函数式接口指的是只有一个抽象方法的接口,被当做是Lambda表达式的类型,最好使用@Functionallnterface注解,防止其他人在里面添加方法,只需要在想要执行的地方利用传递的对象调用对应的接口中唯一的方法即可
Stream 的特性
1.stream不存储数据
2.stream不改变源数据
3.stream的延迟执行特性
Lambda表达式语法:基本语法
(parameters)->expression或(parameters)->(statements)
1.)不需要参数,返回值为5
( )->5
2.)接受一个参数(数字类型),返回其2倍的值
x->2*x
3.)接受2个参数(数字),并返回差值
(x,y)->x-y
4.)接受2个int类型的整数,返回他们的和
(int x,int y)->x+y
5.)接受一个string对象,并在控制台打印,不返回任何值
(String s)-> System.out.print(s)
基本Lambda例子
1.2使用Lambda expression 排序players
Comparator<String> sortByName=(String s1,String s2)->(s1.compareTo(s2));
Array.sort(players,sortByName);
1.3也可以使用如下方式
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2))); sort方法可以穿传一个comparator的实现对象,而这个类是功能类,所以可以用Lambda。
使用Lambda和Stream