java基础之函数式接口
一、函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口
二、自定义函数式接口
格式:
@FunctionalInterface //该注解可省,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错
public interface MyFunctionalInterface {
void myMethod();
}
例子:
public class FunctionalInterfaceTest {
public static void main(String[] args) {
show(()->{
System.out.println("使用lambda表达式执行");
});
}
public static void show(MyFunctionalInterface inner){
inner.method();
}
}
三、使用Lambda作为参数和返回值:如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用 函数式接口作为方法参数。
例子:Lambda作为参数
public class FunctionalInterfaceTest {
public static void main(String[] args) {
getThread1(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"....执行");
}
});
getThread2(()->{
System.out.println(Thread.currentThread().getName()+"....执行");
});
}
public static void getThread1(Runnable task){
new Thread(task).start();
}
public static void getThread2(Runnable task){
new Thread(task).start();
}
}
例子:作为返回值
public class ComparatorTest {
//定义一个方法,方法的返回值类型使用函数式接口Comparator
public static Comparator<Integer> getComparator(){
/*
return new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//降序
return o2 - o1;
}
};
*/
//使用lambda简写
return((o1, o2)-> o2 - o1);
};
public static void main(String[] args) {
Integer[] arr = {1,3,9,2,7,8};
System.out.println("....排序前...."+Arrays.toString(arr));
Arrays.sort(arr,getComparator());
System.out.println("....排序后...."+Arrays.toString(arr));
}
}
四、简单明了例子
public class MyInterfacesTest {
public static void main(String[] args) {
/* getMethod(new MyInterfaces<String>() {
@Override
public int method(String s) {
return s.length();
}
});
*/
//简写方式
getMethod(s -> s.length()); //处理
}
public static void getMethod(MyInterfaces<String> myInterfaces){
int len = myInterfaces.method("HelloWorld"); //传参
System.out.println("该字符串的长度为:"+len);
}
}
java基础之函数式接口的更多相关文章
- 用好JAVA中的函数式接口,轻松从通用代码框架中剥离掉业务定制逻辑
大家好,又见面了. 今天我们一起聊一聊JAVA中的函数式接口.那我们首先要知道啥是函数式接口.它和JAVA中普通的接口有啥区别?其实函数式接口也是一个Interface类,是一种比较特殊的接口类,这个 ...
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
- Java基础-Collection子接口之List接口
Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...
- 【Java 8】函数式接口(一)—— Functional Interface简介
什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- 【Java 8】函数式接口(二)—— 四大函数接口介绍
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...
- Java 8 特性 —— 函数式接口
函数式接口 概述:接口中只有一个抽象方法. 函数式接口,即适用于函数式编程场景的接口.而 Java 中的函数式编程体现就是 Lambda,所以函数式接口就是可以适用于 Lambda 使用的接口.只有确 ...
- Java 之 常用函数式接口
JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在 java.util.function 包中被提供.下面是最简单的几个接口及使用示例. 一.Supplier 接口 java ...
- Java 中的函数式接口
java.util.function中定义了几组类型的函数式接口以及针对基本数据类型的子接口. Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t) ...
随机推荐
- 面试题:关于StringBuffer()源码的深度理解Debug分析
import org.junit.Test; /** * @author CH * @create 2021 上午 11:23 */ public class IDEADebug { @Test pu ...
- Mac安装Scala2.12
一.下载Scala brew install scala@2.12 二.设置环境变量 vim ~/.bash_profile export SCALA_HOME=/usr/local/opt/scal ...
- bash 学习
学习bash shell 第一天 在百度百科上找的解释 Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系 ...
- c/c++ 2019公司面试题目录
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12131500.html c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识) ...
- SpringBoot整合富文本编辑器(UEditor)
UEditro是一款比较好用的富文本编辑器,所谓的富文本编辑器就是和服务器交互的数据不是普通的字符串文件,而是一些内容包含比较广的字符串,一般是指的html页面,目前比较好用的是百度的UEditor, ...
- 基于RAG的MaxKB知识库问答系统如何选择向量模型
在MaxKB中替换向量模型前,我们需要先了解向量相关的原理和技术,此处不做赘述,大家可以自行学习.可以了解下Embedding.Embedding核心,向量库等内容. 一.MaxKB 默认向量模型 M ...
- C# async/await使用举例
1.async/await几点总结 a.被async标记的方法,返回值类型只能为void.Task.Task<T>. b.被async标记的方法,内部可以有await修饰符,表明内部逻辑某 ...
- 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
图表图片由阿里巴巴提供 本文作者的观点:QwQ-32B 作为小型开源 AI 模型,在数学.编程等任务上表现接近甚至超越 DeepSeek-R1 671B模型,同时计算资源占用大幅降低,使其更易部署和使 ...
- 大模型评测之幻觉检测hallucination_evaluation_model
大背景: 2025开年deepseek铺天盖地的新闻 参会代表已经表明,年度主线就是以AI为基础 Manus于3月初横空出世 国内各种模型竞赛的现状,只要是和科技沾边的公司不可能没有大模型,哪怕是里三 ...
- JMeter 线程编号 __threadNum 获取不到
场景: 在 BeanShell PreProcessor 中,使用 vars.get("__threadNum") 获取不到当前线程数,如: import org.apache.j ...