42JDK1.8新特性【函数式接口、Stream】

本文介绍了Java1.8中的函数式接口、Lambda表达式,重点讲解了Consumer、Supplier、Function等核心接口的应用,以及如何使用Stream进行集合操作,包括筛选、切片和映射。同时提到了如何结合单元测试进行开发实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

day42

JDK1.8新特性

函数式接口

方法、构造方法和数组引用

方法、构造方法和数组引用就是Lambda的另一种表现形式

方法引用

若Lamdba表达式中的内容由方法已经实现了,可以使用方法引用这个技能

当你需要使用方法引用时,目标引用放在分隔符::前,方法的名称放在后面

注意:参数个数、类型,返回值

对象::实例方法

Lambda表达式中调用方法的参数类型和返回值必须和函数式接口中的抽象方法一致

注意方法特定存在,前后对照;ps:String有equals方法,而Integer没有

public class Test01 {
   

	public static void main(String[] args) {
   
		
//		I1 i1 = new I1() {
   
//			@Override
//			public void method(String str) {
   
//				System.out.println(str);
//			}
//		};
//		i1.method("少年游");
		
//		I1 i1 = (str)->System.out.println(str);
//		i1.method("少年游");
		
		//println里的参数列表和返回值类型必须和method方法一致才行
		I1 i1 = System.out::println;//对象::实例方法
		i1.method("少年游");
	}
}

interface I1{
   
	
	public void method(String str);
}
类名::静态方法

Lambda表达式中调用方法的参数类型和返回值必须和函数式接口中的抽象方法一致

public class Test01 {
   

	public static void main(String[] args) {
   
		
//		Comparator<Integer> comparator = new Comparator<Integer>() {
   
//			@Override
//			public int compare(Integer o1, Integer o2) {
   
//				return Integer.compare(o1, o2);
//			}
//		};
//		int compare = comparator.compare(10, 20);
//		System.out.println(compare);
		
//		Comparator<Integer> comparator = (o1,o2)-> Integer.compare(o1, o2);
//		int compare = comparator.compare(10, 20);
//		System.out.println(compare);
		
		//类名::静态方法
		Comparator<Integer> comparator = Integer::compare;
		int compare = comparator.compare(10, 20);
		System.out.println(compare);
		
	}
}
类名::实例方法

Lambda表达式参数列表中第一个参数必须是实例方法的调用者

Lambda表达式参数列表中第二个参数必须是实例方法的参数

public class Test01 {
   

	public static void main(String[] args) {
   
		
//		I1<String> i1 = new I1<String>() {
   
//			@Override
//			public boolean method(String t1, String t2) {
   
//				return t1.equals(t2);
//			}
//		};
//		boolean method = i1.method("abc", "abc");
//		System.out.println(method);
		
//		I1<String> i1 = (str1,str2)->str1.equals(str2);
//		boolean method = i1.method("abc", "abc");
//		System.out.println(method);
		
		//重现method方法,该方法的第一个参数调用equals,第二个参数是传入equals里的数据
		I1<String> i1 = String::equals;//类名::实例方法
		boolean method = i1.method("abc", "abc");
		System.out.println(method);
		
	}
}

interface I1<T>{
   
	public boolean method(T t1,T t2);
}
构造方法引用

类名::new

需要调用的构造方法的参数列表必须和函数式接口中抽象方法的参数列表一致

public class Test01 {
   

	public static void main(String[] args) {
   
		
//		I1 i1 = new I1() {
   
//			@Override
//			public Student method() {
   
//				return new Student();
//			}
//		};
//		Student stu = i1.method();
//		System.out.println(stu);
		
		I1 i1 = Student::new;//调用无参构造去创建学生对象
		Student stu1 = i1.method();
		System.out.println(stu1);
		
		I2 i2 = Student::new;//调用有参构造去创建学生对象
		Student stu2 = i2.method("奇男子", 23, 12000, Course.JAVA);
		System.out.println(stu2);
	}
}
interface I1{
   
	public Student method();
}

interface I2{
   
	public Student method(String name, int age, double salary, Course course);
}
    
enum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值