[译]Java8的函数式接口】的更多相关文章

Java8引入了 java.util.function 包,他包含了函数式接口,具体的描述在以下api说明文档中: 函数式接口为lambda表达式和方法引用提供目标类型.每个函数式接口有一个单独的抽象方法,被称为函数式接口的函数方法,lambda表达式的参数和返回类型与之匹配或适应. 在这篇文章中,将着重介绍function包40个接口中的4个: Predicate<T> 代表有一个参数的断言(boolean值的函数) Predicate 接口允许我们创建一个基于给定参数并返回一个boolea…
函数式接口 就是在java8里允许你为一个接口(只有一个实现的,声明为FunctionalInterface注解的)实现一个匿名的对象,大叔感觉它与.net平台的委托很类似,一个方法里允许你接收一个方法签名,这个方法在一个声明为FunctionalInterface的接口里,并且它是接口里唯一的方法. java框架里也在用它 在我们的java框架里,很多地方在用函数式接口,下面的线程类的部分代码 @FunctionalInterface public interface Runnable { /…
由于JDK8已经发布一段时间了,也开始逐渐稳定,未来使用JAVA语言开发的系统会逐渐升级到JDK8,因为为了以后工作需要,我们有必要了解JAVA8的一些新的特性.JAVA8相对JAVA7最重要的一个突破是引入了函数式接口(包在java.util.function),下面我们来介绍下相关接口 FunctionalInterface注解 JDK8新引入的用于标识函数式接口的一个注解,如注释中所说明的,他是一个接口的信息注解,用于标识接口是函数式接口.被该注解标识的接口必须满足有且仅有一个抽象方法,当…
Functional 函数式(Functional)接口 只包含一个抽象方法的接口,称为函数式接口. 你可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明). 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口.同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口. 在java.util.function包下定义了…
public static void main(String[] args) { // TODO Auto-generated method stub //函数式接口 Function<Integer, String[]> f=x->new String[x]; String[] strs=f.apply(10); System.out.println(strs.length); Runnable r=()->System.out.println("Runnable接口&…
什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java8引入@FunctionalInterface 注解声明该接口是一个函数式接口. 语法 抽象方法有且仅有一个 接口使用@FunctionalInterface 注解进行标注 接口中可以存在默认方法和静态方法实现 如下形式: /** * 定义函数式…
Supplier接口: 继续学习一个新的函数式接口--Supplier,它的中文意思为供应商.提供者,下面看一下它的javadoc: 而具体的方法也是相当的简单,就是不接受任何参数,返回一个结果: 对它有了大概的了解之后,下面用代码来使用一下它: 貌似这函数的使用相当简单呀,但是简单并非是它的用处少,那它到底可以应用在现实中的什么场合之下呢?工厂就是其一,因为工厂有时里面是不接收参数的,直接从工厂里面返回一个结果,当然如果工厂里面要接收参数且返回结果那Function函数式接口就可以派上用场了,…
Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加简洁. 一.概念 1.什么是函数式接口 概念 所谓的函数式接口, 当然首先是一个接口, 然后就是在这个接口里面 只能有一个抽象方法. 有关函数式接口,有个专门的注解叫:@FunctionalInterface.该注解主要特点有: 1.该注解只能标记在"有且仅有一个抽象方法"的接口上,表示函…
Java8函数式接口 之前有关JDK8的Lambda表达式 Java代码(1)--Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加简洁 一.概念 1.什么是函数式接口 所谓函数式接口,当然首先是一个接口,然后就是在这个接口里面 只能有一个抽象方法 有关函数式接口,有个专门的注解叫  @FunctionalInterface ,该注解主要特点有: 1.该注解只能标记在“有且仅有一个抽象方法”的接口上,表示函数式接口 2.JDK8接口中的静态…
目录 函数式接口 什么是函数式接口 函数式接口的使用 Java8内置的四大核心函数式接口 一.Consumer:消费型接口(void accept(T t)) 二.Supplier:供给型接口(T get()) 三.Function : 函数型接口(R apply(T t)) 四.Predicate:断言型接口(boolean test(T t)) 五.其他类型的一些函数式接口 总结 函数式接口 Lambda表达式需要接口的支持,并且接口的抽象方法还只能有一个,要么没法区分实现的是哪一个抽象方法…
目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda表达式是一个匿名函数 本质 函数式接口的实例 作用 语法糖,代替匿名实现类对象 核心思路 可推断的可省 格式 ()->{} () Lambda形参列表,接口中的抽象方法的形参列表 -> Lambda操作符,箭头操作符 {} La…
需求:在给定 List 集合中,需根据不同的算法规则,选取计算方式并返回结果: 例如:[1, 2, 3, 4, 5] List 集合中都是 Integer 类型数据,根据提供的算法规则,sum 求和,min 求最小值,max 求最大值等: 使用场景:需要根据指定 key,选取不同的逻辑处理方式: 一.使用枚举类实现 (1)定义枚举类DataEnum,需实现指定的计算接口,根据不同的算法规则[使用枚举类中默认的 name 属性],来选取不同的算法计算方式: (2)代码如下: // 计算方式接口定义…
Introduction to Functional Interfaces – A concept recreated in Java 8 Any java developer around the world would have used at least one of the following interfaces: java.lang.Runnable,java.awt.event.ActionListener, java.util.Comparator,java.util.concu…
背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式,借助lambda表达式,我们可以编写出性能更好,可读性更强的代码,更重要的,它给我们带来了一种编程思想的改革,作为一个活跃了20多年的编程语言,java能够做到与时俱进,拥抱新变化,实属不易,虽然现在很多公司包括我所在的公司尚未把jdk升级到最新的版本,但关注并学习每一个版本带来的新变化,是每个j…
Lambda表达式初步 介绍 什么是Lambda表达式? 在如 Lisp.Python.Ruby 编程语言中,Lambda 是一个用于表示匿名函数或闭包的运算符 为何需要lambda表达式? 在 Java 中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 JavaScript 中,函数参数是一个函数,返回值是另一个函数的情况是非常常见的:JavaScript 是一门非常典型的函数式语言. 看如下匿名内部类实例: import javax.swing.*; import…
一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名方法什么的很像.我们继续看看把. 第一篇,我们做的事分苹果,这次我们给苹果根据重量来做个Comparator吧. 先来以前的: Comparator<Apple> byWeight=new Comparator<Apple> () { @Override public int comp…
JDK 1.8 API 包含了很多内置的函数式接口.其中就包括我们在老版本中经常见到的 Comparator 和 Runnable,Java 8 为他们都添加了 @FunctionalInterface 注解,以用来支持 Lambda 表达式. 值得一提的是,除了 Comparator 和 Runnable 外,还有一些新的函数式接口,它们很多都借鉴于知名的 Google Guava 库. 对于它们,即使你已经非常熟悉了,还是最好了解一下的: Predicate 断言 Predicate 是一个…
什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterface注解该接口,没有该注解的接口满足约束也行. 自定义一个函数式编程接口 /** * 自定义一个函数式编程接口 * 函数式编程只有一个抽象方法,所以默认的是实现的是这个抽象方法 * @param <T> * @param <R> */ @FunctionalInterface publ…
这里面简单的讲一下java8中的函数式接口,Function.Consumer.Predicate和Supplier. 函数式接口例子 一.Function:接受参数,有返回参数 package com.linux.huhx.function; import java.util.function.Function; public class FunctionDemo { private static int operateValue(int value, Function<Integer, In…
目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 @FunctionalInterface: 高阶函数: Function: Operator: Predicate: Consumer: Supplier 总结 参考: 函数式接口: 函数式接口,首先是一个接口,然后就是在这个接口里面只能有一个抽象方法,但是可以有多个非抽象方法的接口. Java 8…
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java8引入@FunctionalInterface 注解声明该接口是一个函数式接口. 1.语法定义 /** * 定义函数式接口 * 接口上标注@FunctionalInterface 注解…
在前面几篇简单介绍了一些Lambda表达式得好处与语法,我们知道使用Lambda表达式是需要使用函数式接口得,那么,岂不是在我们开发过程中需要定义许多函数式接口,其实不然,java8其实已经为我们定义好了4类内置函数式接口,这4类接口其实已经可以解决我们开发过程中绝大部分的问题,只有一小部分比较特殊得情况需要我们自己去定义函数式接口,本文就简单来学习一下java8内置得4大核心函数式接口. 一.Consumer<T>:消费型接口(void accept(T t)) 来看一个简单得例子: /**…
两者关系: Lambda表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作为方法的参数也是可以的. 函数式接口只有一个抽象方法,并且没有重写Object类中的方法(Object类中的public的方法除外),可以有默认方法和静态方法. 函数式接口一般用注解@FunctionalInterface标注. 例子: 1.声明一个函数式接口 @FunctionalInterfac…
//java8的4大核心函数式接口//1.Consumer<T>:消费性接口//需求:public void happy(double money, Consumer<Double> consumer){ consumer.accept(money);}@Testpublic void test(){ happy(1000,(e)-> System.out.println("happy消费了"+ e +"元"));}//2.Suppli…
一.Java8新特性概述 1.Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 接口中的默认方法与静态方法 6. 新时间日期 API 7. 其他新特性 // 其他例如HashMap在JDK8中的提升,将会在HashMap的章节进行拓展  二.Lambda表达式 1.为什么使用Lambda Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递). 可以写出更简洁.更 灵活的代码. 2…
Function 我们知道Java8的最大特性就是函数式接口.所有标注了@FunctionalInterface注解的接口都是函数式接口,具体来说,所有标注了该注解的接口都将能用在lambda表达式上. 接口介绍 /** * Represents a function that accepts one argument and produces a result. * * <p>This is a <a href="package-summary.html">f…
package java_8; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.function.…
上一篇博客介绍了java8新增的Lambda表达式,这一节介绍一下java8的函数式编程,两者之间有什么联系呢?请往下看~~~ Lambda表达式怎样在java类型中表示的呢? 语言设计者投入了大量的精力来思考怎样使现有的函数友好地支持lambda.终于採取的办法是:添加函数式接口的概念.函数式接口接口就是具有一个方法的普通接口.像这种 接口能够被隐式的转换为Lambda表达式!.. 每个Lambda表达式都相应一个 类型,一般是接口类型.而"函数式接口"是指只包括一个抽象方法的接口,…
前言 接上篇文章 java8 新特性 由于上篇过于庞大,使得重点不够清晰,本篇单独拿出 java8 的 Lambda 表达式和函数式接口说明. Lambda 表达式 lambda 表达式其实就是使用了新的语法结构来实现一个接口,并实现里面的唯一的一个方法,用来代替以前的使用匿名内部类的方式. // x 指参数列表 -> 后面表示处理过程,Consumer 没有返回值 Consumer out = x -> System.out.println(x); // x,y 指参数列表 -> 后面…
什么是函数式接口   函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method).但是它还是一个接口,只是有些特殊罢了.  函数式接口的出现主要是为了配合Java8的另一个新特性Lamdba表达式来使用. 接口中只有一个抽象方法 接口中面可以加一个注解@FunctionalInterface来检查接口中的方法是不是只有一个抽象方法 在接口里面可以加入 默认方法 和 静态方法 函数式接口也可以继承,但是继承的时候,抽象方法必须一样 函…