Java1.8新特性:函数式接口与lambda表达式和方法引用配合使用
更新时间:2022-12-29 作者:
lambda表达式
//创建线程的步骤
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("1");
}
});
//lambda写法
new Thread( () -> System.out.println("1"));new HashMap<>().forEach((key,value)
-> System.out.println("key:" + key + " value:" + value));
new ArrayList<>().forEach( value
-> System.out.println(value));new HashMap<>().forEach((key,value) -> {
System.out.println("key:" + key);
System.out.println("value:" + value);
});() -> {return 1};
() -> 1;方法引用
class Father{
public static void sout(){
System.out.println("sout");
}
public void send(){
System.out.println("send");
}
}
public static void main(String[] args) {
//静态方法
Father::sout;
//实例方法
Father::send;
//new 方法
Father::new;
Father father = new Father();
father::send;
}函数式接口
- 供给型接口:
- Supplier,没有参数一个返回值
- 供给,理解就是你要给别人供给,所以要有一个返回值
//供给型接口 没有参数一个返回值
//提供方法
public static Object supplier(Supplier<Object> supplier){
return supplier.get();
}
public static void main(String[] args) {
//方法调用
supplier(new Supplier<Object>() {
@Override
public Object get() {
//返回值
return 1;
}
});
//lambda表达式使用
supplier(() -> 1);
//方法引用 () -> 1 等价于 Object::new
//相当于返回了一个Object对象
supplier(Object::new);
}- 消费型接口:
- Consumer,一个参数没有返回值
- 消费,理解就是你要消费,所以需要一个参数
//消费型接口 一个参数没有返回值
//提供方法
public static void consumer(int param,Consumer<Integer> consumer){
consumer.accept(param);
}
public static void main(String[] args) {
//方法调用
consumer(1,new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
//消费参数
System.out.println(integer);
}
});
//lambda
consumer(1,integer -> System.out.println(integer));
//方法引用
consumer(1,System.out.println(integer));
}- 断言型接口:
- Predicate,一个参数一个boolean值
- 断言,就是给你一个参数你判断然后返回boolean值
//断言型接口 一个参数一个boolean值
public static boolean predicate(int param,Predicate<Integer> predicate){
return predicate.test(a);
}
public static void main(String[] args) {
//方法调用
predicate(1,new Predicate<Integer>() {
@Override
public boolean test(Integer integer) {
return integer == 1;
}
});
//lambda
predicate(1,integer -> 1 == 1);
}- 函数型接口:
- Function,一个参数一个返回值
//函数式接口 一个参数一个返回值
public static String function(int param,Function<Integer,String> function){
return function.apply(param);
}
public static void main(String[] args) {
//方法调用
function(1,new Function<Integer, String>() {
@Override
public String apply(Integer integer) {
return "str";
}
});
//lambda
function(1,() -> "str");
}- 自定义函数式接口
@FunctionalInterface
interface Sum<T>{
T all(int a,int b);
}
public static int myFunction(int a,int b,Sum<Integer> sum){
return sum.all(a,b);
}
public static void main(String[] args){
//调用方法
myFunction(1, 2, new Sum<Integer>() {
@Override
public Integer all(int a, int b) {
return a + b;
}
});
//lambda
myFunction(1, 2, (x, y) -> x * y);
}