在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. centos7部署ELK测试

    一.背景 学习ELK,动手实验. 参考:https://blog.csdn.net/qq_33406938/article/details/80307679 二.环境 虚拟机一台,已安装jdk1.8, ...

  2. flex布局以及常用属性。

    (1)flex布局排列 会消除块状属性,所有与块状相关的属性将失效,比如块状元素会独占一行,如图2,设置flex后会在一行排列

  3. 【Redis面试题】如何使用Redis实现微信步数排行榜?

    1. 前言 之前写过一篇博客,讲解的是Redis的5种数据结构及其常用命令,当时有读者评论,说希望了解下这5种数据结构各自的使用场景,不过一直也没来得及写. 碰巧,在3月份找工作面试时,有个面试官先问 ...

  4. (Java实现) 均分纸牌

    题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  5. Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重

    算法提高 盾神与砝码称重 时间限制:1.0s 内存限制:256.0MB 提交此题 查看参考代码 问题描述 有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码.盾神为 ...

  6. SQL Server实现 LeetCode 176 第二高的薪水

    176. 第二高的薪水 SQL架构 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+- ...

  7. Java实现 LeetCode 78 子集

    78. 子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...

  8. Java实现 LeetCode 41 缺失的第一个正数

    41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...

  9. Java实现 LeetCode 37 解数独

    37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...

  10. Linux 系统定时任务

    crond服务管理与访问控制 启动 service crond restart 开机自启动 chkconfig crond on 用户的crontab设置 crontab [选项],其中 -e :编辑 ...