第十四章 lambda 表达式与流处理

14.1 lambda表达式
        14.1.1lambda表达式简介
                lambda表达式可以用非常少的代码实现抽象方法。

                lambda表达式不能独立执行,因此必须实现函数式接口,并且会返回一个函数式的接口的对象
 

()->{代码块}
参数->{代码块}
(参数1,参数2,……参数n)->{代码块}

第一行实现无参方法,方法体是操作符右侧代码块

                第二行实现只有一个参数的方法,方法体是操作符右侧代码快

                第三行实现多参数的方法,方法体是操作符右侧代码块

        14.1.2 lambda表达式实现函数式接口
                1.函数式接口

                仅包含一个抽象方法的接口,接口中的方法简单明了地说明了接口的用途

                自定义函数接口:
 

interface MyInterface{
    void method();
}

2.lambda表达式实现无参抽象方法


package fourteen;
interface SayHi{
	String say();
}
public class NoParamDemo {
	
	public static void main(String[] args) {
		SayHi pi=()->"你好~嗨嗨嗨嗨";
		System.out.println(pi.say());
		SayHi h1=new SayHi() {
			public String say() {
				return "你好";
			}
		};
		System.out.println(h1.say());
	}
 
}

第十四章 lambda 表达式与流处理_第1张图片

3.lambda表达式实现有参抽象方法

                例题14.2

package fourteen;
interface AddInt{
	int add(int a, int b);
}
 
public class ParamDemo {
	static int ad(int x,int y) {
		return x+y;
	}
	public static void main(String[] args) {
		AddInt ai1=new AddInt() {
			public int add(int a,int b) {
				return a+b;
			}
		};	
		System.out.println(ai1.add(3,5));
		
		AddInt ai2=(a, b)->{
				return a+b;
		};
		System.out.println(ai1.add(3,5));
		AddInt ai3=ParamDemo::ad;
		System.out.println(ai3.add(3, 5));
		
	}
	
 
}
 

第十四章 lambda 表达式与流处理_第2张图片

4.lambda表达式使用代码块

                例题14.3

package fourteen;
interface CheckGrade{
		String check(int grade);
}
public class CheckDemo{
	public static void main(String args[]) {
		CheckGrade g=(n)->{
			if(n>=90&&n<=100) {
			return "成绩为优";
			}
		else if(n>=80&&n<=90) {
			return "成绩为良";
		}
		else if(n>=60&&n<=80) {
			return "成绩为中";
		}
		else if(n>=0&&n<=60) {
			return "成绩为差";
		}else {
			return "成绩无效";
		}
		};
		System.out.println(g.check(99));
	}
}

第十四章 lambda 表达式与流处理_第3张图片

14.1.3lambda表达式调用外部变量

14.2方法的引用     

        14.2.1引用静态方法

package fourteen;
interface ConIn{
	ConDemo action(int i);
}
public class ConDemo {
	public ConDemo() {
		System.out.print("无参构造方法");
	}
	public ConDemo(int a) {
		System.out.print("有参的构造方法"+a);
	}
	public static void main(String[] args) {
		ConIn ci1=ConDemo::new;
		ci1.action(5);
 
	}
 
}
package fourteen;
 
import java.text.SimpleDateFormat;
import java.util.Date;
interface InstanceMethodInterface{
	String method(Date date);
}
public class InstanceMethodDemo {
	public String format(Date date) {
		//创建日期格式化对象,并指定日期格式化
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(date);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		InstanceMethodDemo demo=new InstanceMethodDemo();
		InstanceMethodInterface im=demo::format;
		Date date=new Date();
		System.out.println("默认格式:"+date);
		System.out.println("接口输出的格式:"+im.method(date));
	}
 
}

第十四章 lambda 表达式与流处理_第4张图片

你可能感兴趣的:(java,开发语言)