失去人性,失去很多:失去兽性,失去一切.--<三体> 在Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口.它们主要在 java.util.function 包中,下面简单介绍几个其中的接口及其使用示例. Supplier接口 Supplier接口是对象实例的提供者,定义了一个名叫get的抽象方法,它没有任何入参,并返回一个泛型T对象,具体源码如下: package java.util.function; @Functio…
弱小和无知不是生存的障碍,傲慢才是.--<三体> 什么是Lambda表达式 Lambda表达式是表示可传递匿名函数的一种简洁方式,Lambda表达式没有名称,但是有参数列表.函数主体.返回类型,还可能有一个可以抛出的异常列表.它是Java8新增的特性,有了它我们再也不用像之前那样写一堆笨重的匿名类代码了,我们先来体验一下. 欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. 与匿名函数对比 下面我们先举个例子,有这样一个表示口罩的类: package one.more.study; /…
城市就是森林,每一个男人都是猎手,每一个女人都是陷阱.--<三体> 在哪使用Lambda表达式? 在上一篇文章(传送门)中介绍了Lambda表达式的基本语法,其中的举了一个Lambda表达式的例子,就是按照品牌给口罩列表进行排序: maskList.sort((Mask o1, Mask o2) -> o1.getBrand().compareTo(o2.getBrand())); 这里使用的sort方法的参数类型是Comparator<T>,我们就是把Lambda表达式作为…
我们都是阴沟里的虫子,但总还是得有人仰望星空.--<三体> 在之前的文章中介绍了Lambda表达式的基本语法和正确使用姿势,这次我来介绍一些Lambda更简洁的用法. 欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. 类型推断 编译器可以通过函数式接口推断出Lambda表达式的参数类型,所以在编写Lambda表达式时,可以省略参数类型.比如: Comparator<Mask> comparator = (Mask o1, Mask o2) -> o1.getBran…
给岁月以文明,而不是给文明以岁月.--<三体> 在上一篇文章(传送门)中介绍了JDK为我们提供的常用函数式接口,JDK不仅提供的这些函数式接口,其中一些接口还为我们提供了实用的默认方法,这次我们来介绍一下Comparator复合. 欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. Comparator的使用 在之前文章的例子中,我们使用Comparator.comparing静态方法构建了一个Comparator接口的实例,我们再来简单介绍一下.先来看一下Mask类是怎么写的: pa…
你的无畏来源于无知.--<三体> 在上一篇文章(传送门)中介绍了Comparator复合,这次我们来介绍一下其他的复合Lambda表达式. Consumer复合 Consumer接口中,有一个默认方法andThen,它的入参还是Consumer接口的实例.做完上一个Consumer的操作以后,再做当前Consumer的操作,就像工厂的流水线一样,比如: Consumer<Mask> brand = m -> m.setBrand("3M"); Consum…
1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算机要做什么,不指定具体怎么做 1.3 函数式编程 跟声明式编程类似,就是告诉计算机做什么,不指定具体怎么做 参考博文 1.4 demo实例 1.4.1 需求 随机产生一个int类型的数组,分别利用命令式编程和函数值编程获取数组中的最小值 1.4.2 思路 命令式编程: 随记产生int类型数组 ->…
Java8新特性--四大内置函数式接口 预备知识 背景 Lambda 的设计者们为了让现有的功能与 Lambda 表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念. 什么是函数式接口? 函数式接口指的是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,这样的接口可以隐式转换为 Lambda 表达式. 但是在实践中,函数式接口非常脆弱,只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败.为了克服这种代码层面的脆弱性,并显式说明某个接口是函数式接口,J…
常用的函数式接口Function接口 package com.yang.Test.FunctionStudy; import java.util.function.Function; /** * java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据, * 前者称为前置条件,后者称为后者条件 * Function接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型R的结果. * 使用场景例如:将String类型转换…