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的一个非常典型的应用场景是:有一个任务想要往下执 ...
随机推荐
- OSPF补全计划-0 preface
哇靠,一看日历吓了我一跳,我这一个月都没写任何东西,好吧,事情的确多了点儿,同事离职,我需要处理很多untechnical的东西,弄得我很烦,中间学的一点小东西(关于Linux的)也没往这里记,但是我 ...
- 在UnrealEngine中用Custom节点实现马赛克效果
参考这位大神的Shaderhttp://blog.csdn.net/noahzuo/article/details/51316015 //input BaseUV 屏幕UV //intput Tili ...
- ACM知识点总结
1 枚举 2 模拟 3 构造 4 位运算的应用 5 查找 5.1 二分查找 5.2 分块查找 5.3 哈希查找HASH 5.3.1 线性探测法 5.3.2 字符串与哈希 6 搜索 6.1 深度优先搜索 ...
- python系统编程(六)
threading注意点 1. 线程执行代码的封装 通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会 ...
- js计算总页数
前端js取余是a%b 取除数parseInt(a / b) /** * 总页数@param(总条数,每页总条数) */ function pageTotal(rowCount, pageSize) { ...
- javaweb笔记
(1)web项目需复制web.xml文件 (2)需要复制classes文件 需要把bin里面的com----复制到classes中
- Mac使用Clion配置OpenGL
Mac使用Clion配置OpenGL 之前博主是用Xcode配置的openGL,但后来因为要与非Mac队友合作,于是大家决定统一使用Clion,博主于是再次配置开发环境,这里记录一下 预先准备 Mac ...
- JS_高程5.引用类型(5)Array类型的操作方法
一.操作方法 1.concat()方法 基于当前数组中的所有项创建一个新数组.具体说,是先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组.在没有给concat() ...
- Spring(1)—初识
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 特点: 轻量--从大小与开销两方面而言Spring都是轻量的. 控 ...
- IO流(2)—知识结构
结构: 注:此IO包下主要介绍: 节点流:(字节流)FileInputStream.FileOutputStream.(字符流)Filereader.FileWriter 处理流(缓冲流):(字节流) ...