函数式接口
函数式接口
定义
- 函数式接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口;
- 函数式接口可以被隐式转换为Lambda表达式;
自定义函数式接口
@FunctionalInterface interface GreetingService { void sayMessage(String message); }
函数式接口种类
1.8 之前已有的
java.lang.Runnable java.util.concurrent.Callable java.security.PrivilegedAction java.util.Comparator java.io.FileFilter java.nio.file.PathMatcher java.lang.reflect.InvocationHandler java.beans.PropertyChangeListener java.awt.event.ActionListener javax.swing.event.ChangeListener
1.8 新增的
java.util.function
- function中包含很多方法。例子如Predicate的使用。
public static void eval(List<Integer> list, Predicate<Integer> predicate) { // 方法一 for(Integer n: list) { if(predicate.test(n)) { System.out.println(n + " "); } } //方法二 结合Stream 的过滤方法 System.out.println("-----------------------------------------"); list.stream().filter((name) -> (predicate.test(name))).forEach((name) ->{ System.out.println(name); }); //方法三 结合Stream 的过滤方法 ,在结合 方法引用 System.out.println("-----------------------------------------"); list.stream().filter((name) -> (predicate.test(name))).forEach(System.out::println); } public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // 传递参数 n eval(list, n->true); // 传递参数 n eval(list, n-> n>3); //Predicate接口接受多个条件同时进行比较 List<String> lists = Arrays.asList("Great works are accomplished not by strength but by perseverance.","Keep its original intention and remain unchanged"); Predicate<String> starts = (name) -> name.startsWith("1"); Predicate<String> lengths = (name) -> name.length() == 4; lists.stream().filter(starts.and(lengths)).forEach(System.out::println); }
-
方法一使用的是常用的for循环遍历,方法二和方法三结合了Stream Api的过滤方法,及方法引用。
参考地址
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
两分钟让你明白Go中如何继承
最近在重构代码的时候,抽象了大量的接口。也使用这些抽象的接口做了很多伪继承的操作,极大的减少了代码冗余,同时也增加了代码的可读性。 然后随便搜了一下关于Go继承的文章,发现有的文章的代码量过多,并且代码format极其粗糙,命名极其随意,类似于A、B这种,让人看着看着就忘了到底是谁继承谁,我又要回去看一遍逻辑。 虽然只是样例代码,我认为仍然需要做到简洁、清晰以及明了。这也是我为什么要写这篇博客的原因。接下里在这里简单分享一下在Go中如何实现继承。 1. 简单的组合 说到继承我们都知道,在Go中没有extends关键字,也就意味着Go并没有原生级别的继承支持。这也是为什么我在文章开头用了伪继承这个词。本质上,Go使用interface实现的功能叫组合,Go是使用组合来实现的继承,说的更精确一点,是使用组合来代替的继承,举个很简单的例子。 1.1 实现父类 我们用很容易理解的动物-猫来举例子,废话不多说,直接看代码。 type Animal struct { Name string } func (a *Animal) Eat() { fmt.Printf("%v is eating", ...
- 下一篇
1.1 云原生历史
1.1 云原生历史 云原生的发展历程 云原生(Cloud Native)最初来描述云上应用的典型架构与特性,随着容器、kubernetes、Serverless、FaaS技术的演进,CNCF(Cloud Native Computing Foundation ,云原生计算基金会)把云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件、让应用更容易编写、编排的运行框架等”,希望能够让开发者最好的利用云的资源、产品和交付能力。 下边大致梳理一下云原生的发展过程。 2004 年 ~ 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干。2013 年,Docker 项目正式发布。2014 年,Kubernetes 项目也正式发布。2015 年,CNCF 成立。2017 年,CNCF 达到 170 个成员和 14 个基金项目。2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果