Lambda表达式可以理解为一段带输入参数的可执行语句块,这种也称语法表达式也称函数式表达。如果代码要完成的计算无法放在一个表达式中,就可以像写方法一样,把这些代码放在 { }中,并包含显式的 return语句(有时需要return,有时不需要,看情况而定)。
Lambda的一个重要作用就是代替内部类
Lambda表达式简化
1,参数类型可以省略:当编译器可以推测出参数的类型时,可以省略参数类型。
(name) -> {
System.out.println(name);
}
2,参数只有一个时,可以省略小括号。
name -> {
System.out.println(name);
}
3,表达式只有一行时,可以省略大括号了结尾的分号。
name-> System.out.println(name)
4,-> 后面包含的可以是一个普通的表达式。
(int a,int b) -> (a*b +2)
Lambda和Stream API
Stream可以充当Java集合的适配器,使程序能按照操作流的方式来访问集合中的元素。
Stream提供了一组功能强大的操作集合的方法:
1,filter(Predicate<? super T> predicate) 对集合中的元素进行过滤,返回符合条件的元素的流。filter方法的参数Predicate用来指名过滤条件。
2,forEach(Consumer<? super T> action) 遍历集合中的元素。
3,limit(long maxSize) 返回maxSize指定个数的元素。
4,max(Comparator<? super T> comparator) 根据规则返回最大值
5,min(Comparator<? super T> comparator) 根据规则返回最小值
6,sorted() 自然排序
7,sorted(Comparator<? super T> comparator) 按规则排序
8,mapToInt(ToIntFunction<? super T> mapper) 把当前的流映射为int类型的流,返回一个IntStream对象,ToIntFunction指定映射方式,ToIntFunction接口中有一个返回值为int的applyAsInt(T value)方法,该方法指定把参数value映射为int类型的方式。
9,toArray()返回一个数组
方法引用
在lambda表达式中,开发者也可以指定具体的方法。这就是方法的引用。
可能已经有现成的方法可以完成你想要传递到其他代码的某个动作。假设你想对字符串排序,而不考虑字母的大小写。可以传递以下方法。
表达式:Arrays.sort(strs,String::compareToIgnoreCase);
构造函数引用
构造器引用与方法引用很类似,只不过方法名为 new。例如,Person::new是 Person构造器的一个引用。哪一个构造器这取决于上下文。
流的创建:
1,Collection接口的stream方法将任何集合转换为一个流。
2,Stream.of方法可以将一个数组转换为流。
3,Arrays.stream()
想要按照某种方式来转换流中的值,此时使用map方法并传递执行该转换的函数。
Stream<String> stringStream = words.map(String::toLowerCase);
在使用map时,会有一个函数应用到每一个元素上,并且其结果是包含了应用该函数后所产生的所有结果的流。
语法糖
指在计算机语言中添加某种语法,虽然不能显著增加语言的性能,但是可以方便程序员的编程,提供程序的可读性,简化程序,减少程序的出错机会。
如:Lambda表达式,泛形,自动装箱,foreach,可变参数,枚举,断言,switch