JDK8--04:内置接口
在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:内置接口的更多相关文章
- tornado内置接口调用顺序initialize\prepare...
一. initialize方法 首先, 该方法是框架预留的一个初始化时加载自定义内容的钩子, 其会在http请求方法之前调用 二. prepare方法 预处理方法, 在执行对应的请求方法之前调用. h ...
- golang内置类型和内置函数
golang内置类型和内置函数是不需要引入包直接可用的 golang内置类型: 数值类型 string int,unint float32,float64 bool array 有长度的 comple ...
- 【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点
一.序言 UCode Cms管理系统是面向企业级应用软件开发的脚手架.当前版本1.3.4.快速体验: git clone https://gitee.com/decsa/demo-cms.git (一 ...
- JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...
- Java8常用的内置函数式接口(一)Predicate、Consumer、Supplier、Function
Java8常用的内置函数式接口(一) 简介 JDK 1.8 API中包含了很多内置的函数式接口.有些是在以前版本的Java中大家耳熟能详的,例如Comparator接口,或者Runnable接口.对这 ...
- python 自动化之路 day 04.1 python内置函数
总结一下内置函数,Build-in Function. 一.数学运算类 abs(x) 求绝对值 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注 ...
- 微信内置浏览器私有接口WeixinJSBridge介绍(转)
这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友.分享函数.隐藏工具栏.隐藏三个点按钮等功能,需要的朋友可以参考下 微信网页进入,右上角有三个小点,没错, ...
- 微信内置浏览器私有接口WinXinJsBridge介绍
关于微信内置浏览器私有接口WeiXinJsBridge,只是之前接触过的一个微信公众号项目中遇到过,不过并没有深入研究过,可以说并没有了解过... 刚好今天无意中看到了这方面的知识,就补习一下,弥补一 ...
- Java8内置的函数式编程接口应用场景和方式
首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...
随机推荐
- Rocket - diplomacy - NodeImp
https://mp.weixin.qq.com/s/HgUpTCh0D94Uymj5qQk-ag 介绍NodeImp相关基础类的实现. 1. 类图 节点实现(NodeImp ...
- jchdl - GSL实例 - LogicalLeft
https://mp.weixin.qq.com/s/WNm4bLWzZ0oWHWa7HQ6Y6w 逻辑左移,继承自Shifter类.只需要实现shift方法即可. 参考链接 https:// ...
- Java实现最小费用最大流问题
1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...
- Java实现 蓝桥杯 历届试题 波动数列
问题描述 观察这个数列: 1 3 0 2 -1 1 -2 - 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b ...
- java实现第六届蓝桥杯立方体自身
立方变自身 题目描述 观察下面的现象,某个数字的立方,按位累加仍然等于自身. 1^3 = 1 8^3 = 512 5+1+2=8 17^3 = 4913 4+9+1+3=17 - 请你计算包括1,8, ...
- Java学习的一般过程
伴随着科学技术的不断发展,世界开始走向信息化.网络化.大数据化.自然而然,计算机专业变得十分热门.尽管如此,计算机专业人才对社会来说仍然是供不应求,当然,这里指的是高层次技术人才.因此,对于我们这些占 ...
- TCP协议“三次握手”与“四次挥手”详解(上)
在使用TCP协议进行数据的传输之前,客户端与服务器端需要建立TCP Connection,即建立连接,之后两端才能进行数据的传输. 下面堆TCP连接“三次握手”的过程进行说明. 1.相关概念 首先,我 ...
- ubuntu安装ssh服务器
1.安装 sudo apt-get install openssh-server 2.配置文件路径 / etc/ssh/sshd_config 3.操作 sudo /etc/init.d/ssh st ...
- URL 链接中的 UTM参数何定义?
浏览网页或者点击广告的时候,细心的朋友们或者有关注浏览器地址栏的 URL 链接时,一定会发现 utm_source 或者与其类似的链接,那么链接中的这个UTM参数有什么用呢? UTM 为“Urchin ...
- CSS优先级的两种理解方式
方式一:值相加 我们先去MDN看看官方的解释: 优先级是如何计算的? 优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定. 而当优先级与多个 CSS ...