当前位置:网站首页>Simple to use Lambda expressions

Simple to use Lambda expressions

2022-08-09 06:28:00 hey hei hei hei

Lambda表达式

语法

() -> {}

() are the parentheses of the interface method,如果有参数,也需要写参数.只有一个参数时,括号可以省略.

-> split left and right

{} 要实现的方法体,只有一行代码时,可以不加

概念

使用于lambdaThe interface for the expression is called函数型接口,A functional interface is simply an interface with abstract methods.

基本语法

interface Test1Service{
    
	void sayMsg(String msg);
}

public class Test1 {
    

	public static void main(String[] args) {
    
		// TODO Auto-generated method stub
		Test1Service ts = msg -> System.out.println("test"+msg);
		ts.sayMsg("hello");
	}

}

注意事项

  1. java8为函数式接口引入了一个新注解**@FunctionalInterface**,该注解主要用于编译级错误检查
  2. The interface contains two abstract methods,It violates the definition of functional interface,IDE会直接报错
  3. can be included in functional interfaces默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的
  4. can be included in functional interfaces静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的
  5. can be included in functional interfacesObject里的public方法,因为任何一个函数式接口的实现,默认都继承了Object类,包含了来自java.lang.Object里对这些抽象方法的实现

进阶

方法引用

We want to implement a method of an interface with another methodA类似,(这里的类似是指参数类型与返回值部分相同),我们直接声明A方法即可

There are three syntaxes for method references:

  1. 类::静态方法名
  2. 类::实例方法名
  3. 对象::实例方法名
interface Function{
    
	String sendMsg(Object o);
	
	@Override
	boolean equals(Object obj);
}

public class Test2 {
    

	public static void main(String[] args) {
    
		// TODO Auto-generated method stub
		Function f = String::valueOf;
		System.out.println(f.sendMsg(1));
		System.out.println(f.sendMsg('c'));
	}

}

构造引用

import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;

class Function3 {
    
	private int x;
	private String y;
	Function3(){
    
		x = 0;
		y = "hello";
	}
	Function3(int x){
    
		this.x = x;
		y = "hello";
	}
	Function3(int x,String y){
    
		this.x = x;
		this.y = y;
	}
	public int getX() {
    
		return x;
	}
	public void setX(int x) {
    
		this.x = x;
	}
	public String getY() {
    
		return y;
	}
	public void setY(String y) {
    
		this.y = y;
	}
	@Override
	public String toString() {
    
		return "Function3 [x=" + x + ", y=" + y + "]";
	}
}
	
public class Test3 {
    

	public static void main(String[] args) {
    
		// TODO Auto-generated method stub
		//无参
		Supplier<Function3> f1 = () -> new Function3();
		Function3 ft1 = f1.get();
		System.out.println(f1.toString());
		System.out.println(ft1);
		//单参
		Function<Integer, Function3> f2 = x -> new Function3(x);
		System.out.println(f2.apply(1));
		//双参
		BiFunction<Integer, String, Function3> f3 = (x,y) -> new Function3(x,y);
		System.out.println(f3.apply(1, "test"));
		
	}

}

原网站

版权声明
本文为[hey hei hei hei]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/221/202208090621268254.html