java.util.function 中的 Function、Predicate、Consumer
函数式接口:
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 Lambda 表达式。
Function 函数
Function 与 BiFunction
输入一个或多个参数,也可以规定返回值类型,并执行一段逻辑
Function<Integer, Integer> function = num -> num + 1;
Function<Integer, Integer> function1 = num -> num * 2;
System.out.println(function.apply(1)); // out:2
System.out.println(function1.compose(function).apply(1)); // out:4
System.out.println(function1.andThen(function).apply(1)); // out:3 BiFunction<Integer, Integer, Long> bF = (i1, i2) -> Long.parseLong(i1+i2+"");
System.out.println(bF.apply(1, 2)); // out:3 DIYBiFunction<Integer, Integer, Integer, Integer> diyBiFunction = (n1,n2,n3) -> n1+n2+n3;
System.out.println(diyBiFunction.apply(1,2,3)); //out:6 public interface DIYBiFunction<T, U, E, R> {
R apply(T t, U u, E e);
}
public class DIYBiFunctionImpl implements DIYBiFunction {
@Override
public Object apply(Object o, Object o2, Object o3) {
if (o instanceof Integer
&& o2 instanceof Integer
&& o3 instanceof Integer) {
return (Integer)o + (Integer)o2 + (Integer)o3;
} else {
return null;
}
}
}
Predicate 谓词:
判断输入的对象是否符合某个条件
BiPredicate
public class BiPredicateTest {
public static void main(String[] args) {
// 表示一个谓词
Predicate<String> p1 = p -> p.length() > 2;
System.out.println(p1.test("1"));
System.out.println(p1.test("123"));
BiPredicate<Integer, String> biPredicate = (i , s) -> s.length() > i;
System.out.println(biPredicate.test(1, "12"));
}
}
Consumer :
接收一个参数,并执行一段逻辑
BiConsumer
public class BiConsumerTest {
public static void main(String[] args) {
Map<Integer, String> map = Maps.newHashMap();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
BiConsumer<Integer, String> biConsumer = new BiConsumer<Integer, String>() {
@Override
public void accept(Integer integer, String s) {
System.out.println(String.format("out:%s-%s", integer, s));
}
};
map.forEach(biConsumer);
map.forEach(new BiC1());
map.forEach(new BiC2());
}
private static class BiC1 implements BiConsumer<Integer, String> {
@Override
public void accept(Integer integer, String s) {
System.out.println(String.format("BiC1, out: %s - %s", integer, s));
}
}
private static class BiC2 implements BiConsumer<Integer, String> {
@Override
public void accept(Integer integer, String s) {
System.out.println(String.format("BiC2, out: %s - %s", integer, s));
}
}
}
java.util.function 中的 Function、Predicate、Consumer的更多相关文章
- [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...
- [Java] java.util.Arrays 中使用的 sort 采用的算法 (转)
http://book.douban.com/annotation/15154366/Q: java.util.Arrays 中使用的 sort 采用的是什么算法? A: java中Arrays. ...
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- 集合框架的类和接口均在java.util包中。 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。
集合框架的类和接口均在java.util包中. 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换.
- 集合-强大的集合工具类:java.util.Collections中未包含的集合工具
任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.Guava沿着这些路线提供了更多的工具方法:适用于所有集合的静态方法.这是Guava最流行和成熟 ...
- 005-guava 集合-集合工具类-java.util.Collections中未包含的集合工具[Maps,Lists,Sets],Iterables、Multisets、Multimaps、Tables
一.概述 工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和java.util.Col ...
- [Google Guava] 强大的集合工具类:java.util.Collections中未包含的集合工具
转载的,有问题请联系我 原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collecti ...
- java.util.vector中的vector的详细用法
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创 ...
- java.util.concurrent中的常用组件
一. CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执 ...
随机推荐
- Java性能调优zz
写Java也有n年了,现在还是有不少的坏的代码习惯,也通过学习别人的代码学到了不少好的习惯.这篇文章主要是整理的资料.留给自己做个警戒,提示以后写代码的时候注意!在文章的后面,会提供整理的原材料下载. ...
- 错误解决记录------------mysql连接本地数据库显示"can't get hostname for your address"
mysql连接本地数据库遇到 can't get hostname for your address 不明原因的本地mysql数据库连接不上,总是显示can't get hostname for yo ...
- 【DWM1000】 code 解密4一 ANCHOR 二进宫testapprun_s
上面我们的代码分析到ANCHOR 调用了一次testapprun_s,但是后面退出后发现还是满足while 条件,逼不得已还得再次调用testapprun_s.testapprun_s 也就是这样一点 ...
- Ubuntu 安装 Anaconda3 详细步骤
主要介绍在 Ubuntu 14.04中安装 Anaconda3 的详细过程.(原文地址:http://blog.csdn.net/u012318074/article/details/77074665 ...
- BZOJ3795 : 魏总刷DP
对于HARD: 需要满足$k+u[i]\times k\leq T+late[i]$. 对于EASY: 需要满足$k+u[i]\times k\leq T-rest[i]$. 故对于HARD,设$a[ ...
- JS RegExp类型
用来定义正则表达式的类型, 1. 通常情况下,我们可以直接用字面量形式来定义正则表达式,格式如下: var expression = /pattern/flags pattern为正则表达式 flag ...
- Flask特殊装饰器
@app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...
- JavaScript关于函数对象的一些学习总结
1.概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascrip ...
- Win10+Ubuntu 二三事
拯救者R720,反反复复弄了不少次,记录一下有用的blog 卸载 http://www.cnblogs.com/xia-Autumn/p/6294055.html https://blog.csdn. ...
- Charles抓包(未完待续)
Charles是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析. Charles 通过将自己设置成系统的网络访问代理服务器,使得 ...