lambda表达式的一些语法规范
/**
*@ClassName: Lambda_use
*@Description 新特性Lambda表达式的使用
*@Author 我心
*@Date 2021/7/23
*@Time 12:12
*/
/*格式:
* ->:lambda操作符 或箭头操作符
* ->左边:lambda形参列表(其实就是接口中抽象方法的形参列表)
* ->右边:lambda体(其实就是重写的抽象方法的方法体)
*
* 总结:
* ->左边:lambda形参列表的参数类型可以省略(如果有类型推断),如果只有一个形参,那么可以省略括号
* ->右边使用一对{}包裹,如果整个方法体同只有一条执行语句(也可能时return语句)则可以省略{}
*
*lambda表达式的本质:作为函数式接口的实例
*
* 如果一个接口中只声明了一个抽象方法,则此接口就称为函数式接口,我们可以在一个接口上声明注解来验证是否为函数式接口
* **/
在这里我使用了java内置的函数式接口
class Lambda_use {
public static void main(String[] args) {
Consumer<String> consumer = new Consumer<>() {
@Override
public void accept(String s) {
System.out.println("你好"+s);
}
};
consumer.accept("世界");
//使用lambda表达式
Consumer<String> consumer1=s-> System.out.println("你好"+s);
consumer1.accept("世界");
//使用实例
List<String> list=new ArrayList<>();
list.add("南京");
list.add("北京");
list.add("天津");
list.add("上海");
list.add("冬京");
//正常方式
Predicate<String> predicate = new Predicate<>() {
@Override
public boolean test(String s) {
//筛选出含有“京”的字符串
if (s.contains("京"))
return true;
return false;
}
};
List<String> stringList1 = filterString(list, predicate);
System.out.println(stringList1);
System.out.println("****************************");
//lambda表达式
Predicate<String> predicate1=s->s.contains("京");
List<String> stringList = filterString(list, predicate1);
System.out.println(stringList);
}
public static List<String> filterString(List<String> list, Predicate<String> predicate){
List<String> stringList=new ArrayList<>();
for (String s : list) {
//经过筛选算法后如果为真
if (predicate.test(s)){
stringList.add(s);
}
}
return stringList;
}
}
运行结果