图说jdk1.8新特性(2)--- Lambda
简要说明

jdk常用函数式接口
Predicate
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
default Predicate<T> negate() {
return (t) -> !test(t);
}
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
predicate接口返回一个测试结果,结果类型为true或者falsepredicate支持and、or、negate方法
Consumer
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
consumer接口接受一个参数,然后对该参数做消费,返回void
consumer支持通过andThen方法来进行链式调用消费
Function
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
static <T> Function<T, T> identity() {
return t -> t;
}
}
Function接口可以看做是一个工厂,接收原料得到产出
Function接口可以通过compose方法进行前置调用,通过andThen方法进行后置调用,通过identity方法得到传入参数注意compose方法和andThen方法的参数定义中使用的<? super X> 和 <? extends X> , 使用的方式完全满足 PECS原则(produce extends consume super)
Supplier
@FunctionalInterface
public interface Supplier<T> {
T get();
}
supplier完全是一个凭空创造者,不需要任何输入,直接返回预期输出
使Lambda更精简


- lambda表达式大部分情况下可以唯一确定参数的类型,所以可以省略参数类型只写参数名称
- 当lambda表达式的表达式部分只包含一条语句的时候,可以省略大括号,return 语句以及句尾的分号
- lambda表达式可以用前面所说的方法引用形式进一步简化
图说jdk1.8新特性(2)--- Lambda的更多相关文章
- jdk1.8新特性之lambda表达式
lambda表达式其实就是指一个匿名函数,应用最广泛的就是匿名内部类的简化.在jdk1.8之前,我们定义一个匿名内部类可能需要写一大坨代码,现在有了lambda之后,可以写的很简洁了.但不是说lamb ...
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ...
- jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
Jdk1.8已经出很久了但是很多同学对它的特性在android studio 中的应用可能还不是很熟悉,今天我们就来对这个新特性在AS中做它的应用实践. 一.首先在有JDK1.8的情况下我们要在AS的 ...
- 图说jdk1.8新特性(3)--- 注解与类型推测优化
获取同一类型多个注解 jdk1.8的java.lang.Class类新增了方法getAnnotationsByType方法,该方法可以获取某一个类型的注解列表,具体代码示例如下: public c ...
- 图说jdk1.8新特性(1)--- 函数式接口
函数式接口 总结起来就以下几点: 如果一个接口要想成为函数接口(函数接口可以直接用lambda方式简化),则必须有且仅有一个抽象的方法(非default和static) 可以通过注解@Function ...
- 图说jdk1.8新特性(5)--- 编译器新特性
/** * Returns the name of the parameter. If the parameter's name is * {@linkplain #isNamePresent() p ...
- 图说jdk1.8新特性(4)--- stream
总述 jdk1.8引入了Stream相关的API,通过该API.可以实现流式编程,使你写代码的时候行云流水 Stream使得集合的转换变得更加简单,原来可能需要写多个for循环或者多个if判断的,直接 ...
- jdk1.8新特性之方法引用
方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...
- JDK1.8新特性之(一)--Lambda表达式
近期由于新冠疫情的原因,不能出去游玩,只能在家呆着.于是闲来无事,开始阅读JDK1.8的源代码.在开始之前也查询了以下JDK1.8的新特性,有针对性的开始了这段旅程. 只看不操作,也是不能心领神会的. ...
随机推荐
- Android之WebRTC介绍(二)
WebRTC提供了点对点之间的通信,但并不意味着WebRTC不需要服务器.暂且不说基于服务器的一些扩展业务,WebRTC至少有两件事必须要用到服务器: 1. 浏览器之间交换建立通信的元数据(信令)必须 ...
- [转]JsonCpp遍历json
#include "json.h" typedef Json::Writer JsonWriter; typedef Json::Reader JsonReader; typede ...
- 【转载】 tf.cond() ----------------------(tensorflow 条件判断语句 if.......else....... )
原文地址: https://cloud.tencent.com/developer/article/1486441 ------------------------------------------ ...
- PHP环境搭建-Windows系统下PHP环境搭建
1.PHP环境搭建的前提是 Apache HTTP Server (Apache 服务器)已经安装部署成功,并可以正常访问到服务器的主页面.Apache HTTP Server 的安装部署已经在上一篇 ...
- Anaconda(二)
三.配置依赖包仓库 conda在安装依赖包的时候会检测已有包的版本与需要安装的版本是否匹配.以及相关包更新后的版本与现有的其他包是否会造成冲突. 添加清华镜像源(依赖包仓库),命令行中直接使用以下命令 ...
- 如何上传本地jar至远程仓库供其他项目使用
我们首先需要创建自己内部nexus私服仓库.这里假设你已经做好了. 其次我们要明白nexus上如下几个component的用处. maven-central:maven中央库,默认从https://r ...
- 【LeetCode算法-58/66】Length of Last Word/Plus One
LeetCode第58题: Given a string s consists of upper/lower-case alphabets and empty space characters ' ' ...
- LeetCode_453. Minimum Moves to Equal Array Elements
453. Minimum Moves to Equal Array Elements Easy Given a non-empty integer array of size n, find the ...
- 百度SMS发送短信C#
/// <summary> /// 百度接口签名帮助类 /// </summary> public class BaiduApiHelper { #region 构造函数 // ...
- 【NPDP笔记】第六章 市场研究
6.1 产品市场研究 客户心声Voice of Customer,为了找出问题的解决方法,引导消费者经历一系列的情景并进行结构化的深度访谈,以提炼客户需求的过程 在产品开发决策中,需要获取的信息 ...