1 什么是lambda表达式?
Lambda表达式(也叫做闭包),是jdk8中的新语法,它允许我们将函数当成参数传递给某个方法或者将代码本身作为数据进行处理。
2 lambda表达式示例
2.1 用lambda表达式实现Runnable
//通过匿名内部类方法重写Runnable接口
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("通过匿名内部类方法重写Runnable接口");
}
}).start();
//因为重写的方法是没有参数的所以在这个括号中什么都没有写
new Thread(() -> {
//通过lambda表达式重写run方法的方法体
System.out.println("通过lambda表达式重写run方法的内容");
}).start();
JDK8提供的几个内置函数式接口
Function 有入参 有返回值
Customer 有入参 没有返回值
Predicate 有入参 返回值为boolean
Supplier 没有入参 有返回值
/**
map的入参是function,有返回值,适用于我们修改集合元素的泛型 R apply(T t);
peek的入参是Consumer,没有返回值,适用于我们只是修改集合中元素的属性 accept(T t);
所以lambda表达式的匿名方法的格式是:
入参 -> {方法实现} 当没有入参时 使用()
*/
2.2 lambda表达式与Stream API的添加Predicate条件实现filter对集合进行过滤筛选遍历
//lambda表达式 与 Predicate接口进行筛选
List names = new ArrayList<String>();
names.add("xiaoming");
names.add("lilei");
names.add("hanmeimei");
names.add("xuzhouzhou");
names.add("linyang");
names.add("jingqiu");
names.add("laosan");
names.add("shenjiayi");
names.add("kejingteng");
names.add("linzhenxin");
names.add("xutaiyu");
/*添加筛选条件*/
Predicate<String> predicate1 = (n) -> n.contains("l");
Predicate<String> predicate2 = (n) -> n.length() > 4;
/*通过流API进行过滤并遍历结果集
在这里两个predicate条件之间有and()与or()两种条件
*/
names.stream().filter(predicate1.or(predicate2)).forEach(n -> {
System.out.println(n);
});
注意:在lambda表达式中引用的变量是不能进行修改的,也就是在lambda表达式中引用的变量是默认final修饰的。
lambda
遍历demo代码
- sort 无返回值,在自身上排序
- map 将数据处理后使用返回值替代
- filter 将数据进行条件筛选
- collection 将结果生成新的结果返回
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("4123q");
list.add("3dcsd");
list.add("adsfasq");
list.sort((one, two)->one.compareTo(two));
List<String> result = list.stream().filter(item -> item.contains("q")).map(data -> {
return data + data;
}).collect(Collectors.toList());
System.out.println(result);
}