Lambda表达式
函数式接口
Stream流
方法引用
概述
传统方式:做事情的核心是“对象”,过分依赖对象
当下方式:忽略做事情的核心,只要结果
Lambda表达式
写法:(参数类型)->{重写方法的代码}
举例:
public class HelloWorld {
public static void main(String[] args) throws IOException {
new Thread(()-> {
System.out.println("hehe");
}
).start();
}
}
再简化:如果无参,只输出一条结果,才可以用
public class HelloWorld {
public static void main(String[] args) throws IOException {
new Thread(()->
System.out.println("hehe")
).start();
}
}
函数式接口
函数式接口:有且只有一个抽象方法。
写法:
@FunctionalInterface
interface 接口名{
public abstract void 方法名();
}
举例:
package com.llhc;
public class Exercise{
public static void main(String[] args) {
MyFunable mf=new MyFunable();
mf.run();
}
}
@FunctionalInterface//加上这个注解来测试是否为函数式接口
interface Temp{//函数式接口
public abstract void run();
}
class MyFunable implements Temp{
public void run(){
System.out.println("嗯嗯");
}
}
Stream流
Stream流用来遍历和简化“集合”与“数组”
举例:
package com.llhc;
import java.util.ArrayList;
import java.util.List;
public class Exercise{
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("张无忌");
list.add("张三");
list.add("李四");
list.add("王五");
list.stream()
.filter(name->name.startsWith("张"))//张姓
.filter(name->name.length()==2)//名字长度为2
.forEach(name->System.out.println(name));//输出结果
/*
* 我们用stream流来遍历数据
* 发现简单了很多,比起我们之前
* 的传统写法,虽然不习惯,但是值得推敲
* */
}
}
方法引用
package com.llhc;
public class Exercise{
public static void main(String[] args) {
/*
* 传统方法我们要实现这个接口,再调用String的Length方法
* 使用方法引用就无需这样做
* */
FunC f=String::length;
int go=f.go("aa");
System.out.println(go);
}
@FunctionalInterface
interface FunC{
public int go(String str);
}
}