Java:函数式接口

1 概述

函数式接口,是指只有一个抽象方法,但是可以有多个非抽象方法的接口。使用他的目的是为Lambda表达式的使用提供更好的支持,进一步达到函数式编程的目标,提高开发效率。

2 函数式接口的特点

  • 只有一个抽象方法,但是可以有成员、静态和默认方法
  • 使用注解 @FunctionalInterface 可以检查某个接口是否是一个函数式接口(抽象方法的个数是一个)
  • 如果接口是函数式接口,可以添加@FunctionalInterface,也可以不添加
  • 如果某接口包含多余一个抽象方法,在添加@FunctionalInterface 后,会报错

回调函数:简单来说,就是某个方法(A)传入的参数也是一个方法(B),并且在A方法中对方法B进行调用。

3 使用Lambda实现函数式接口

(1)接口的抽象方法没有参数

先定义一个函数式接口

/**
 * 只有一个抽象方法,符合函数式接口的规定 
 */
@FunctionalInterface
public interface FuntionInterface_ {
	public void laugh();
}

实现:

/**
 * 1.8新写法实现接口
 */
public class FunctionalInterface_03 {
	public static void main(String[] args) {
		call (() -> System.out.println("Lambda表达式实现接口")) 
	}
	public static void call(FuntionInterface_ func){
		func.laugh();
	}
}

(2)接口的抽象方法有参数

定义接口:

@FunctionalInterface
interface MyFunctionInter2 {
	void printMessage(String str);
}

实现:

public class FunctionalInterface{
	public static void main(String[] args) {
		String str = "有参函数式接口调用";
		// 使用 lambda 实现有参函数式接口调用
		// str 是字符串,s 是参数,str 给到 s ,打印 s
		call ( s -> System.out.println(s), str);
	}
	//定义调用接口的回调函数
	public static void call(MyFunctionInter2 func,String str) {
		func.printMessage(str);
	}
}

4 JDK自带的函数式接口

(1)Supplier : 表示供应商,有返回值,可以获取数据,使用get()方法获取数据。

public class JdkOwn_01 {
	public static void main(String[] args) {
	
		String result = getResult(new Supplier<String>() {
		result = getResult( ()-> "哈哈" );
		System.out.println(result);//哈哈
		
		// 创建Supplier容器
		// 此时不会调用构造方法创建对象
		Supplier<JdkOwn_01> sup = JdkOwn_01::new;
		// 创建对象并返回
		JdkOwn_01 jo1 = sup.get();
		JdkOwn_01 jo2 = sup.get();
		System.out.println(jo1);
		System.out.println(jo2);
	}

	//定义获取方法,传入供应商接口对象,由返回值
	public static String getResult(Supplier<String> function) {
		//固定写法,通过get() 获取内容
		//具体获取什么需要自己实现
		return function.get();
	}
}

(2) Consumer : 表示消费者接口,不需要返回值,accept(T t) :用于执行消费操作。

public class JdkOwn_02 {
	public static void main(String[] args) {
		String message = "我爱花钱";
		//lambda 实现接口
		//message是参数
		//因为该消费接口是需要参数的,需要定义 x ,接受 message
		//然后打印 x
		consumeResult(x -> System.out.println(x), message);
	}
	//定义消费方法,传入消费接口对象和消费的内容
	public static void consumeResult(Consumer<String> function, String message) {
		function.accept(message);
	}
}

(3)Function<T,R> :接收一个参数,并产生一个结果,T是参数,R是结果,R apply(T t) 方法制造结果。

public class JdkOwn_03 {
	public static void main(String[] args) {
		int num = convertType(x->Integer.parseInt(x), "123");
		System.out.println(num);
	}

	/**
 	 * 接受一个字符串,将其转换为数字,数字是返回值
	 * @param function  自定义接口
	 * @param str  字符串,参数
	 * @return  数字,返回值
	 */
	public static int convertType(Function<String, Integer> function, String str) {
		int num = function.apply(str);
		return num;
	}
}

(4)Predicate : 断言接口,用来做一些判断,booean test(T) :用于做校验比较操作。

public class JdkOwn_04 {
	public static boolean call(Predicate<String> predicate, String message) {
		return predicate.test(message);
	}
	public static void main(String[] args) {
		String message = "ok";
		boolean result = call ( x -> {return x.equals("ok");}, message);
		System.out.println(result);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值