java8新特性(3)--- 函数式接口

java8新特性(3)— 函数式接口

有且仅有一个抽象方法

package com.common.jdk8;import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;// 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
public class Jdk8Test3 {public static void main(String[] args) {GreetingService greetingService = message -> System.out.println("Hello " + message);greetingService.sayMessage("xiaoming");greetingService.sayMessage("xiaoming2");greetingService.sayMessage("xiaoming3");greetingService.sayMessage("xiaoming4");List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// JDK 1.8 新增加的函数接口:java.util.function// Predicate也是这个包下的// Predicate <T> 接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果。// Predicate<Integer> predicate = n -> true// n 是一个参数传递到 Predicate 接口的 test 方法// n 如果存在则 test 方法返回 trueSystem.out.println("输出所有数据:");// 传递参数 neval(list, n -> true);// Predicate<Integer> predicate1 = n -> n%2 == 0// n 是一个参数传递到 Predicate 接口的 test 方法// 如果 n%2 为 0 test 方法返回 trueSystem.out.println("输出所有偶数:");eval(list, n -> n % 2 == 0);// Predicate<Integer> predicate2 = n -> n > 3// n 是一个参数传递到 Predicate 接口的 test 方法// 如果 n 大于 3 test 方法返回 trueSystem.out.println("输出大于 3 的所有数字:");eval(list, n -> n > 3);//不用eval方法System.out.println("不用eval方法,输出大于 3 的所有数字:");list.stream().filter(n -> n > 3).forEach(System.out::println);}public static void eval(List<Integer> list, Predicate<Integer> predicate) {for (Integer n : list) {if (predicate.test(n)) {System.out.println(n + " ");}}}//和eval方法一样public static void eval2(List<Integer> list, Predicate<Integer> predicate) {list.stream().filter(predicate).forEach(System.out::println);}
}//加不加 @FunctionalInterface 对于接口是不是函数式接口没有影响,该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法
//@FunctionalInterface
interface GreetingService {//只能有这一个抽象方法,多了就报错了void sayMessage(String message);//函数式接口里是可以包含默认方法,因为默认方法不是抽象方法default void defaultMethod() {System.out.println("defaultMethod");}//函数式接口里可以包含静态方法,因为静态方法不是抽象方法static void printHello() {System.out.println("Hello");}//函数式接口里允许定义 java.lang.Object 里的 public 方法,这些方法不被看成所谓的抽象方法@Overrideboolean equals(Object obj);}

运行结果

Hello xiaoming
Hello xiaoming2
Hello xiaoming3
Hello xiaoming4
输出所有数据:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
输出所有偶数:
2 
4 
6 
8 
10 
输出大于 3 的所有数字:
4 
5 
6 
7 
8 
9 
10 
不用eval方法,输出大于 3 的所有数字:
4
5
6
7
8
9
10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git仓库迁移,包括所有的分支、标签、日志

仅三行命令即可完成&#xff1a; git clone --bare http://域名/分组/仓库名称.git cd 仓库名称.git git push --mirror http://新域名/新分组/新仓库名称.git

java8新特性(4)— Stream流

java8新特性&#xff08;4&#xff09;— Stream流 遍历集合更强大 package com.common.jdk8;import java.util.*; import java.util.stream.Collectors;//Java 8 API添加了一个新的抽象称为流Stream&#xff0c;可以让你以一种声明的方式处理数据。 //Stream 使用一种类似用…

二、工作量证明链-区块链技术的雏形

用算法解决难题——区块链技术的雏形 构造出一个完美的、可以解决问题的“拜占庭容错系统”是一个不小的挑战。而且构造出来以后&#xff0c;其是否真的有效&#xff0c;能否经得起时间的考验与各方的质疑&#xff0c;这些都关乎着这个系统未来的命运与其创造群体的声誉。 2008…

CocoaPods通过网络代理执行资源更新

一、使用网络代理 首先在电脑设置网络代理配置。 二、设置git的http、https代理 1.查看git是否已经设置网络代理 首先可以先查本地的git配置有没有配置http/https代理&#xff1a;git config --global -e 如果没有看到 [http]proxy和 [https]proxy就代表没有设置http/http…

java8新特性(5)— Optional 类

java8新特性&#xff08;5&#xff09;— Optional 类 空指针解决方案 package com.common.jdk8;import java.util.Optional;//Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true&#xff0c;调用get()方法会返回该对象。 //Optional 是个容器&…

五、工作量证明链解决拜占庭将军问题之模拟程序(Objective-C)

一、概述&#xff1a; 此程序用来模拟工作量证明链如何解决拜占庭将军问题&#xff0c;使用Objective-C语言&#xff0c;需要使用Xcode开发工具运行并执行演示&#xff0c;演示结果打印在Xcode控制台。 二、示例程序&#xff1a; 程序下载地址&#xff1a;工作量证明链解决拜…

java8新特性(6)— 日期与时间

java8新特性&#xff08;6&#xff09;— 日期与时间 全新的日期与时间处理 package com.common.jdk8;import java.time.*;//Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。 //在旧版的 Java 中&#xff0c;日期时间 API 存在诸多问题&#xff…

六、区块链主流共识算法浅析

转自&#xff1a;http://www.cocoachina.com/cms/wap.php?actionarticle&id22240。 一、概述&#xff1a; 1.工作量证明&#xff08;Proof of Work&#xff09;&#xff1a; 通过所有节点的工作量竞争来达成一致。竞争的是运算力。 2.权益证明&#xff08;Proof of S…

java8新特性(7)— Base64

java8新特性&#xff08;7&#xff09;— Base64 新增Base64工具类 package com.common.jdk8;import java.io.UnsupportedEncodingException; import java.util.Base64; import java.util.UUID;//在Java 8中&#xff0c;Base64编码已经成为Java类库的标准。 //Java 8 内置了 …

修改git历史提交的commit信息

本文是基于idea的操作&#xff0c;亲测可用 前言&#xff1a; 很多公司都会自定义 Git - 使用强制策略&#xff0c;那么他的commit信息就会有固定的格式&#xff0c;一旦不是这个格式&#xff0c;就会出现push失败 但是push失败&#xff0c;很多也只在dev和master分支做强制限…

七、区块链如何运用merkle tree验证交易真实性

转载自&#xff1a;https://www.tangshuang.net/4117.html 本文假设你已经知道区块链中merkle tree的原理&#xff0c;现在搞明白具体怎么来实现交易真实性验证。 Merkle Tree 这个小节简述一下merkle的原理。简单说&#xff0c;merkle tree就是一个hash二叉树&#xff0c;父…

idea端口占用解决记录

idea端口占用解决 每次占用&#xff0c;每次都要百度&#xff0c;路子很清晰了&#xff0c;记录下 报错&#xff1a;The port may already be in use or the connector may be misconfigured. 解决&#xff1a; 1.cmd 2.netstat -ano|findstr 你的端口号 举例&#xff1a;…

西安软件行业闲谈

尘埃落定&#xff0c;最终选择了西安 讲真&#xff0c;今年年初&#xff0c;就萌生了回西安的想法&#xff0c;毕竟北漂几年&#xff0c;该回了 当初还想着去上海两年&#xff0c;再去深圳两年&#xff0c;好好体验下各个一线城市的不同魅力 性格就是这样&#xff0c;不甘平凡…

消息队列(1):一个消息队列应该有的特点

消息队列常见场景 异步解耦 削峰填谷 日志收集分析 代替事务&#xff0c;最终一致 消息队列特点 消息队列之所以能异步&#xff0c;就是因为消息并不是实时处理的&#xff0c;那肯定会有一个存储消息&#xff0c;处理消息的地方&#xff0c;才能达到异步效果。 所以最简单的…

消息队列(2):常见的消息队列协议

协议很常见&#xff0c;只要是通信&#xff0c;就会用到协议&#xff0c;就像我们说话的语言一样&#xff0c;不同的语言连通着不同的人群。 所以说&#xff0c;消息队列也是一样&#xff0c;想要互相通信&#xff0c;就要使用同一种协议。 每个协议下的消息队列&#xff0c;都…

spingboot下shiro自定义过滤器roles

shiro默认的roles过滤&#xff0c;是与的关系&#xff0c;就是你的用户得有roles对应的所有角色&#xff0c;才算有权限。 但是实际开发过程中&#xff0c;更多的是或的需求&#xff0c;只要用户满足roles中的一个角色&#xff0c;就算有权限。 所以就涉及到重写过滤器roles&am…

shiro的集群动态权限更新

shiro的动态权限&#xff0c;一般都是将权限放在数据库中&#xff0c;项目启动后将权限加载给shiro 当数据库的权限数据发生改变时&#xff0c;重新加载权限给shiro。 单机这样做没问题&#xff0c;但是当项目服务是集群的时候&#xff0c;比如有tomcat1&#xff0c;tomcat2&am…

消息队列(3):RabbitMQ

RabbitMQ&#xff0c;基于AMQP协议实现。 特点&#xff1a; 消息可靠&#xff1a;持久化消息&#xff0c;传输确认&#xff0c;发布确认。 路由灵活&#xff1a;使用AMQP的Exchange来路由消息&#xff0c;包括RabbitMQ内置的Exchange&#xff0c;还有复杂的路由也可以使用多个…

java基础 --- Arrays.asList():返回指定数组支持的固定大小列表

Arrays.asList()&#xff1a;返回指定数组支持的固定大小列表 首先看下这个方法的源码注释&#xff0c;注意第一句&#xff0c;Returns a fixed-size list backed by the specified array.&#xff0c; 意思就是&#xff1a;返回指定数组支持的固定大小列表 所以&#xff1a;…

[设计模式] ------ 单例模式

单例模式&#xff0c;是众多设计模式中&#xff0c;写法最多&#xff0c;套路最多&#xff0c;坑最多&#xff0c;面试被问最多的设计模式。 基本上&#xff0c;单例模式在面试中已经被问烂了&#xff0c;依稀记得我的上家公司面试我的时候&#xff0c;说到设计模式&#xff0c…