当前位置: 首页 > news >正文

java8函数式接口(函数式接口的匿名实现类作为某些方法的入参)

文章目录

  • 前置介绍
  • 通过 lambda 表达式,使用匿名类,实现函数式接口
  • 函数式接口和回调函数的关系
  • 函数式接口的应用

前置介绍

是 Java 8 引入的核心概念之一,指的是 仅包含一个抽象方法的接口。它可以被 @FunctionalInterface 注解标记(可选),但即使不标记,只要满足“只有一个抽象方法”的条件,编译器也会将其视为函数式接口

函数式接口可以作为 Lambda 表达式的目标类型

往往通过 lambda 表达式的写法,使用一个匿名类,来实现一个函数接口

通过 lambda 表达式,使用匿名类,实现函数式接口

在 Java 8 之前,实现一个函数式接口需要通过匿名内部类

// 传统方式:匿名内部类
Runnable r = new Runnable() {@Overridepublic void run() {System.out.println("Hello from thread");}
};

Java 8 引入后,实现一个函数式接口可以通过 Lambda 表达式简化代码来表示一个匿名的实现类

函数式接口的匿名实现

这种 lambda 表示表示,它是一个匿名类,实现了函数式接口,同时这个匿名实现类中实现的这个方法没有传参,被实现的方法内执行的是一个 sout 的操作

// 使用 Lambda 表达式
Runnable r = () -> System.out.println("Hello from thread");

函数式接口和回调函数的关系

函数式接口的匿名实现类,往往作为某个方法的参数传递过去,这个函数式接口的匿名实现类其实可以看作一个“回调函数”,虽然其是一个匿名实现“类”,但是起到了回调函数的作用,因为可以通过用不同的匿名类实现函数式接口中的唯一那个方法,实现该方法的写法不同,就可以看成“回调函数”的能力了

@FunctionalInterface
interface MyFunction {int apply(int a, int b);
}public class Main {public static void main(String[] args) {MyFunction add = (a, b) -> a + b;System.out.println(add.apply(3, 4)); // 输出 7MyFunction sub = (a, b) -> a - b;System.out.println(sub.apply(3, 4)); // 输出 -1}
}

函数式接口的应用

很常见的场景就是 java 的流式处理中 lambda 表达式

List<String> names = Arrays.asList("Apple", "Banana", "Cherry");// 过滤长度大于5的字符串
List<String> result = names.stream().filter(Predicate.isEqual("Apple")) // 等于某个值.collect(Collectors.toList());
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
// 将数字转换为平方值
List<Integer> squares = numbers.stream().map(x -> x * x).collect(Collectors.toList());
List<String> names = Arrays.asList("Alice", "Bob");
// 打印所有名字
names.forEach(name -> System.out.println(name));

相关文章:

  • MySQL 9.3 超详细下载安装教程(Windows版)附图文说明
  • 通用寄存器 专用寄存器
  • 解决leetcode第3509题.最大化交错和为K的子序列乘积
  • Odoo列表视图的控制标签<control>详解
  • 卷积神经网络(CNN)模型
  • 二十八、面向对象底层逻辑-SpringMVC九大组件之ViewResolver接口设计
  • VB.NET与SQL连接问题解决方案
  • [Java实战]SpringBoot集成SNMP实现OID数据获取:原理、实践与测试(三十三)
  • 自动编码器 潜在空间 Autoencoders 视频截图
  • 数控滑台技术革新:提升生产效率的关键
  • VPet虚拟桌宠,一款桌宠软件,支持各种互动投喂等. 开源免费并且支持创意工坊
  • 系统分析师-考后总结
  • 华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践
  • 面试刷题4:java(核心+acm模式)
  • 小明的GORM结构体标签魔法书
  • 内容的逐次呈现以及二分查找(算法)
  • 【opencv】vs2019中配置opencv
  • 数据结构第4章 栈、队列和数组 (竟成)
  • NTDS.dit 卷影副本提权笔记
  • vue3文本超出三行显示省略号,点击查看更多显示全部文本
  • dw手机网站怎么做/seo一个月工资一般多少
  • 运城网站建设价格/四川刚刚发布的最新新闻
  • 成都网站建设思图佳/博客推广的方法与技巧
  • 日本网站风格/长沙互联网网站建设
  • 遵义网嘉科技有限公司/泉州seo技术
  • 西宁网站建设制作公司/考研最靠谱的培训机构