在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. javascript -字符串常用方法

    let str ="stRing" toUpperCase    /   toLowerCase 大小写 toUpperCase()把一个字符串全部变为大写; toLowerCas ...

  2. [06]HTML基础之表单标签

    1. <form>标签 表单容器,指定method属性和action属性是个良好的习惯. <form methor="POST" action="htt ...

  3. Java实现 LeetCode 753 破解保险箱(递归)

    753. 破解保险箱 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果 ...

  4. Java实现 LeetCode 488 祖玛游戏

    488. 祖玛游戏 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色,黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一串 ...

  5. 【asp.net core 系列】4. 更高更强的路由

    0. 前言 在之前我们介绍了请求通过路由寻找到控制器,以及控制器与视图的数据流转.那么,我们回过头来,再看看路由的一些其他用法. 1. 路由属性(Route Attribute) 按照英文的直接翻译, ...

  6. NumPy之计算两个矩阵的成对平方欧氏距离

    问题描述 设 \({X_{m \times k}} = \left[ {\vec x_1^T;\vec x_2^T; \cdots ;\vec x_m^T} \right]\) (; 表示纵向连接) ...

  7. mui消息弹出确认框

    var btnArray = ['以后再说', '前往添加']; mui.confirm('你需要即时添加员工才可正常使用', '添加员工', btnArray, function(e) { if ( ...

  8. 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝

    目录 一.背景 二.JAVA对象拷贝的实现 2.1 浅拷贝 2.2 深拷贝的实现方法一 2.3 深拷贝的实现方法二 2.3.1 C++拷贝构造函数 2.3.2 C++源码 2.3.3 JAVA通过拷贝 ...

  9. 关于GatewayClient 介绍和使用

    GatewayClient ## 源码 https://github.com/walkor/GatewayClient 根据GatewayWorker版本,选择合适的GatewayClient版本,请 ...

  10. webdriver中的等待

    强制等待:sleep() 设置固定休眠时间,单位为秒. 由python的time包提供, 导入 time 包后就可以使用. 缺点:不智能,使用太多的sleep会影响脚本运行速度. 隐式等待:impli ...