Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口

Java 8 函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以被隐式转换为lambda表达式。

函数式接口可以现有的函数友好地支持 lambda。

JDK 1.8之前已有的函数式接口:

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.security.PrivilegedAction
  • java.util.Comparator
  • java.io.FileFilter
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvocationHandler
  • java.beans.PropertyChangeListener
  • java.awt.event.ActionListener
  • javax.swing.event.ChangeListener

JDK 1.8 新增加的函数接口:

  • java.util.function

java.util.function 它包含了很多类,用来支持 Java的 函数式编程,该包中的函数式接口有:

序号 接口 & 描述
1 BiConsumer<T,U>:代表了一个接受两个输入参数的操作,并且不返回任何结果
2 BiFunction<T,U,R>:代表了一个接受两个输入参数的方法,并且返回一个结果
3 BinaryOperator<T>:代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果
4 BiPredicate<T,U>:代表了一个两个参数的boolean值方法
5 BooleanSupplier:代表了boolean值结果的提供方
6 Consumer<T>:代表了接受一个输入参数并且无返回的操作
7 DoubleBinaryOperator:代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。
8 DoubleConsumer:代表一个接受double值参数的操作,并且不返回结果。
9 DoubleFunction<R>:代表接受一个double值参数的方法,并且返回结果
10 DoublePredicate:代表一个拥有double值参数的boolean值方法
11 DoubleSupplier:代表一个double值结构的提供方
12 DoubleToIntFunction:接受一个double类型输入,返回一个int类型结果。
13 DoubleToLongFunction:接受一个double类型输入,返回一个long类型结果
14 DoubleUnaryOperator:接受一个参数同为类型double,返回值类型也为double 。
15 Function<T,R>:接受一个输入参数,返回一个结果。
16 IntBinaryOperator:接受两个参数同为类型int,返回值类型也为int 。
17 IntConsumer:接受一个int类型的输入参数,无返回值 。
18 IntFunction<R>:接受一个int类型输入参数,返回一个结果 。
19 IntPredicate:接受一个int输入参数,返回一个布尔值的结果。
20 IntSupplier:无参数,返回一个int类型结果。
21 IntToDoubleFunction:接受一个int类型输入,返回一个double类型结果 。
22 IntToLongFunction:接受一个int类型输入,返回一个long类型结果。
23 IntUnaryOperator:接受一个参数同为类型int,返回值类型也为int 。
24 LongBinaryOperator:接受两个参数同为类型long,返回值类型也为long。
25 LongConsumer:接受一个long类型的输入参数,无返回值。
26 LongFunction<R>:接受一个long类型输入参数,返回一个结果。
27 LongPredicate:R接受一个long输入参数,返回一个布尔值类型结果。
28 LongSupplier:无参数,返回一个结果long类型的值。
29 LongToDoubleFunction:接受一个long类型输入,返回一个double类型结果。
30 LongToIntFunction:接受一个long类型输入,返回一个int类型结果。
31 LongUnaryOperator:接受一个参数同为类型long,返回值类型也为long。
32 ObjDoubleConsumer<T>:接受一个object类型和一个double类型的输入参数,无返回值。
33 ObjIntConsumer<T>:接受一个object类型和一个int类型的输入参数,无返回值。
34 ObjLongConsumer<T>:接受一个object类型和一个long类型的输入参数,无返回值。
35 Predicate<T>:接受一个输入参数,返回一个布尔值结果。
36 Supplier<T>:无参数,返回一个结果。
37 ToDoubleBiFunction<T,U>:接受两个输入参数,返回一个double类型结果
38 ToDoubleFunction<T>:接受一个输入参数,返回一个double类型结果
39 ToIntBiFunction<T,U>:接受两个输入参数,返回一个int类型结果。
40 ToIntFunction<T>:接受一个输入参数,返回一个int类型结果。
41 ToLongBiFunction<T,U>:接受两个输入参数,返回一个long类型结果。
42 ToLongFunction<T>:接受一个输入参数,返回一个long类型结果。
43 UnaryOperator<T>:接受一个参数为类型T,返回值类型也为T。

函数式接口实例

1.Predicate

package java8.cainiao;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class PredicateTest {

   public static void main(String args[]){
      List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

      // Predicate<Integer> predicate = n -> true
      // n 是一个参数传递到 Predicate 接口的 test 方法
      // n 如果存在则 test 方法返回 true

      System.out.println("输出所有数据:");

      // 传递参数 n
      eval(list, n->true);
      // Predicate<Integer> predicate1 = n -> n%2 == 0
      // n 是一个参数传递到 Predicate 接口的 test 方法
      // 如果 n%2 为 0 test 方法返回 true

      System.out.println("输出所有偶数:");
      eval(list, n-> n%2 == 0 );

      // Predicate<Integer> predicate2 = n -> n > 3
      // n 是一个参数传递到 Predicate 接口的 test 方法
      // 如果 n 大于 3 test 方法返回 true
      System.out.println("输出大于 3 的所有数字:");
      eval(list, n-> n > 3 );
   }

   public static void eval(List<Integer> list, Predicate<Integer> predicate) {
      for(Integer n: list) {
         if(predicate.test(n)) {
            System.out.println(n + " ");
         }
      }
   }
}

原文地址:https://www.cnblogs.com/crazylqy/p/8867194.html

时间: 2024-08-28 12:32:00

Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口的相关文章

Java 8 新特性:2-消费者(Consumer)接口

(原) 在上一篇,用到过这样一个方法: list.forEach(new Consumer<Integer>() { @Override public void accept(Integer t) { System.out.println(t); } }); 这里重点看List的foreach方法; /* * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIE

【整理】Java 8新特性总结

闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS 版本,和过去的 Java 大版本升级不同,它们只有半年左右的开发和维护期.而未来的 Java11,也就是 18.9 LTS,才是 Java 8 之后第一个 LTS 版本(得到 Oracle 等商业公司的长期支持服务).所以Java 8 就成了最新的一次LTS版本升级,这也是为什么Java开发者对J

Java 8 新特性 – 终极手册整理

1.简介 毫无疑问,Java 8是自Java  5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器.类库.开发工具和JVM(Java虚拟机).在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景. 本教程由下面几部分组成,它们分别涉及到Java平台某一特定方面的内容: 语言 编译器 类库 开发工具 运行时(Java虚拟机) 2.Java的新特性 总体来说,Java 8是一个大的版本升级.有人可能会说,Java 8的新特性非常令人

Java 5/Java 6/Java7/Java 8新特性收集

前言: Java 8对应的JDK版本为JDK8,而官网下载回来安装的时候,文件夹上写的是JDK1.8,同一个意思.(而这个版本命名也是有规律的,以此类推) 一.Java 5 1.https://segmentfault.com/a/1190000004417288 二.Java 6 2.https://segmentfault.com/a/1190000004417536 三.Java 7 1.http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-

Java 5/Java 6/Java7/Java 8新特性收集(转载)

Java 8对应的JDK版本为JDK8,而官网下载回来安装的时候,文件夹上写的是JDK1.8,同一个意思.(而这个版本命名也是有规律的,以此类推) 一.Java 5 1.https://segmentfault.com/a/1190000004417288 二.Java 6 2.https://segmentfault.com/a/1190000004417536 三.Java 7 1.http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-new-

Java 8新特性

现在,是时候把所有Java8的重要特性收集整理成一篇单独的文章了,希望这篇文章能给你带来阅读上的乐趣.开始吧! 目录结构 介绍 Java语言的新特性 2.1 Lambdas表达式与Functional接口 2.2 接口的默认与静态方法 2.3 方法引用 2.4 重复注解 2.5 更好的类型推测机制 2.6 扩展注解的支持 Java编译器的新特性 3.1 参数名字 Java 类库的新特性 4.1 Optional 4.2 Streams 4.3 Date/Time API (JSR 310) 4.

Java 8新特性之旅:使用Stream API处理集合

在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda表达式增强方法”中,我已经深入解释并演示了通过lambda表达式和方法引用来遍历集合,使用predicate接口来过滤集合,实现接口的默认方法,最后还演示了接口静态方法的实现. 源代码都在我的Github上:可以从 这里克隆. 内容列表 使用流来遍历集合. 从集合或数组创建流. 聚合流中的值. 1.

Java 8新特性终极指南

目录结构 介绍 Java语言的新特性 2.1 Lambdas表达式与Functional接口 2.2 接口的默认与静态方法 2.3 方法引用 2.4 重复注解 2.5 更好的类型推测机制 2.6 扩展注解的支持 Java编译器的新特性 3.1 参数名字 Java 类库的新特性 4.1 Optional 4.2 Streams 4.3 Date/Time API (JSR 310) 4.4 JavaScript引擎Nashorn 4.5 Base64 4.6 并行(parallel)数组 4.7

Java 8新特性探究(八)精简的JRE详解

http://www.importnew.com/14926.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 Java 8新特性探究(八)精简的JRE详解 2015/02/05 | 分类: 基础技术 | 0 条评论 | 标签: JRE 分享到:2 原文出处: 成熟的毛毛虫的博客 Oracle公司如期发布了Java 8正式版!没有让广大javaer失望.对于