在JDK8--3中已经说过,使用lambda方法需要新增函数式接口,为了使用方便,JDK8已经提供了许多内置接口,总的归纳来说,有四大函数式接口。

/**
*
* java8 四大内置接口
*
* 1、消费性接口:Consumer<T>
* 默认方法:void accept(T t)
*
* 2、供给型接口:Supplier<T>
* 默认方法:T get()
*
* 3、函数型接口:Function<T, R>
* 默认方法:R apply(T t)
*
* 4、断言型接口:Predicate<T>
* 默认方法:boolean test(T t)
*/

1、消费型接口,Consumer<T>,默认方法:void accept(T t)

使用场景:传入一个参数,在方法内对参数做处理,不做返回。

demo需求:对一个double入参乘以5之后做输出

demo示例:

public void consumerMethod(double d, Consumer consumer){
consumer.accept(d);
} @Test
public void consumerTest(){
log.info("consumerTest输出============={}");
consumerMethod(, m -> log.info("{}*5={}", m, (double)m*));
}

测试结果:

2、供给型接口,Supplier<T>,默认方法:T get()

 使用场景:无入参,有返回

 demo场景:返回一个100以内随机整数的集合

 demo样例:

public List supplierMethod(int num, Supplier supplier){
List list = new ArrayList<>();
for (int i=;i< num;i++){
list.add(supplier.get());
}
return list;
} @Test
public void supplierTest(){
List<Integer> s = supplierMethod(,()-> (int)(Math.random()*));
log.info("supplierTest输出============={}",JSON.toJSONString(s));
}

测试结果:

3、函数型接口:Function<T, R>, 默认方法:R apply(T t)

使用场景:有入参,有出参

demo需求:对一个字符串进行切割,返回切割后的第一个字符串

demo样例:

public String functionMethod(String num, Function<String,String> function){
return function.apply(num);
} @Test
public void functionTest(){
String s = functionMethod("354sd654sdasd",(x)->x.split("s")[0]);
log.info("functionTest输出============={}",s);
}

demo输出:

4、断言型接口:Predicate<T>,默认方法:boolean test(T t)

使用场景:有入参,按照条件判断,返回boolean

demo需求:对一个字符串集合做判断,如果不包含指定字符串,就从集合中剔除

demo样例:

    public List<String> preticateMethod (List<String> list, Predicate<String> predicate){
Iterator iterator = list.iterator();
while (iterator.hasNext()){
if(!predicate.test((String) iterator.next())){
iterator.remove();
}
}
return list;
} @Test
public void preticateTest(){
List<String> list = new ArrayList<>();
list.add("");
list.add("");
list.add("adsfdf");
list.add("asfd");
list.add("ghgfhgfh");
list.add("54ads");
log.info("functionTest输出============={}", JSON.toJSONString(preticateMethod(list,(x)->x.contains("a"))));
}

  demo测试结果:

5、其实,上述4个内置接口是我们平时使用的比较多的内置接口,除了这四个接口外,JDK8还提供其他的子类以供使用

  以Function接口为例,需求可能不止一个入参,可能是多个入参,有的需求可能是我的入参指定必须是double,或者出参必须是duoble,针对不同的需求,JDK8都做了对应的内置函数,例如

* Function 的子接口
* BiFunction<T, U, R>
    R apply(T t, U u);
* UnaryOperator<T> extends Function<T, T>
* BinaryOperator<T> extends BiFunction<T,T,T>
* ToDoubleFunction<T>   
    double applyAsDouble(T value);
* ToDoubleBiFunction<T, U>
    double applyAsDouble(T t, U u);
* ToIntBiFunction<T, U>
    int applyAsInt(T t, U u);
* ToIntFunction<T>
    int applyAsInt(T value);
* ToLongBiFunction<T, U>
    long applyAsLong(T t, U u);
* ToLongFunction<T>
    long applyAsLong(T value);
* LongFunction<R>
    R apply(long value);

  上述只是举例说明JDK8针对不同的需求有不同的内置接口,并非全量的接口。

JDK8--04:内置接口的更多相关文章

  1. tornado内置接口调用顺序initialize\prepare...

    一. initialize方法 首先, 该方法是框架预留的一个初始化时加载自定义内容的钩子, 其会在http请求方法之前调用 二. prepare方法 预处理方法, 在执行对应的请求方法之前调用. h ...

  2. golang内置类型和内置函数

    golang内置类型和内置函数是不需要引入包直接可用的 golang内置类型: 数值类型 string int,unint float32,float64 bool array 有长度的 comple ...

  3. 【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点

    一.序言 UCode Cms管理系统是面向企业级应用软件开发的脚手架.当前版本1.3.4.快速体验: git clone https://gitee.com/decsa/demo-cms.git (一 ...

  4. JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...

  5. Java8常用的内置函数式接口(一)Predicate、Consumer、Supplier、Function

    Java8常用的内置函数式接口(一) 简介 JDK 1.8 API中包含了很多内置的函数式接口.有些是在以前版本的Java中大家耳熟能详的,例如Comparator接口,或者Runnable接口.对这 ...

  6. python 自动化之路 day 04.1 python内置函数

    总结一下内置函数,Build-in Function. 一.数学运算类 abs(x) 求绝对值 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注 ...

  7. 微信内置浏览器私有接口WeixinJSBridge介绍(转)

    这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友.分享函数.隐藏工具栏.隐藏三个点按钮等功能,需要的朋友可以参考下 微信网页进入,右上角有三个小点,没错, ...

  8. 微信内置浏览器私有接口WinXinJsBridge介绍

    关于微信内置浏览器私有接口WeiXinJsBridge,只是之前接触过的一个微信公众号项目中遇到过,不过并没有深入研究过,可以说并没有了解过... 刚好今天无意中看到了这方面的知识,就补习一下,弥补一 ...

  9. Java8内置的函数式编程接口应用场景和方式

    首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...

随机推荐

  1. Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

    https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...

  2. Chisel3 - util - Queue

    https://mp.weixin.qq.com/s/vlyOIsQxR6bCqDDMtRQLLg   实现队列模块,先入先出(FIFO).   参考链接: https://github.com/fr ...

  3. Redis高可用-主从,哨兵,集群

    主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...

  4. Java实现蓝桥杯模拟空地长草

    问题描述 小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1. 小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地. 这些草长得很快,每个月,草都会向外长出一 ...

  5. Java实现 LeetCode 309 最佳买卖股票时机含冷冻期

    309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...

  6. Java实现 蓝桥杯VIP 算法提高 质因数2

    算法提高 质因数2 时间限制:1.0s 内存限制:256.0MB 将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出.最后输出质因数的个数. 输入格式 一行,一个 ...

  7. Java实现 LeetCode 102 二叉树的层次遍历

    102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 2 ...

  8. Java实现 LeetCode 82 删除排序链表中的重复元素 II(二)

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4- ...

  9. 使用dotnet Cli向nuget发布包

    长话短说, 今天分享如何在nuget.org创建并发布.NET Standard package. 前置 安装勾选.NET Core开发套件的Visual Studio; 安装dotnet Cli 从 ...

  10. Spire.Cloud.SDK for Java 合并、拆分Excel单元格

    Spire.Cloud.SDK for Java 是Spire.Cloud云产品系列中,用于处理Word.Excel.PowerPoint以及PDF文档的JAR文件,可执行文档编辑.转换.保存等操作. ...