上一节里,介绍了一个函数接口:
java.util.function.Consumer除了Consumer之外,java.util.function 中还有很多其他的函数接口,从文件名可以看出,它们大致分为以下几类:
类别 | 描述 |
Consumer | 函数接受一些输入参数,但不提供返回值 |
Predicate | 谓词。函数接受一些参数,并返回一个true/false的值 |
Supplier | 供应者。函数不需要参数,并提供一个返回值 |
Operator | 函数需要一个或多个同类型的参数,并返回一个同类型的返回值 |
Function | 函数接受一些输入参数,并提供一个返回值 |
下面是一些例子.
一、BiFunction
首先看BiFunction的Doc说明:
Represents a function that accepts two arguments and produces a result
大意就是只要一个函数需要两个参数,并有返回值,则可以使用BiFunction代表。如下:
class Calculator<T, U, R>{ public R add(BiFunction<T, U, R> bc, T t, U u){ return bc.apply(t, u); } }
这里BiFunction代表函数引用,t和u代表要传入函数的两个参数,R表示返回值类型。可以如下使用函数引用调用:
Calculator<Integer, Integer, Integer> calculator = new Calculator<>(); Integer add = calculator.add(Math::addExact, 3, 5); System.out.println(add);
也可以使用Lambda表达式:
Calculator<Integer, Integer, Integer> calculator = new Calculator<>(); Integer add = calculator.add((n, m)->{return n+m;}, 3, 5); System.out.println(add);
这里n和m分别是函数需要的两个参数,3和5分别是传入的参数,参数类型由编译器推断。
二、Predicate
看Predicate的Doc说明:
Represents a predicate (boolean-valued function) of one argument
代表一个返回boolean值的,需要一个参数的谓词。
Predicate<Integer> p = n -> {return n>0;}; boolean test = p.test(4); System.out.println(test);
这里定义了一个用来判断一个数是不是正数的谓词。
三、自定义函数接口
可以自定义函数接口。任何一个只有一个未定义的方法的接口都可以认为是一个函数接口,例如:
interface PositiveNumber<T>{ boolean test(T a); }
可以如上面Predicate一样的使用,例如:
PositiveNumber<Integer> pn = n -> {return n>0;}; boolean isPositive = pn.test(4); System.err.println(isPositive);
通常,一个接口会加上注释@FunctionalInterface,用于表明当前接口是一个函数接口。@FunctionalInterface本身不是必须的,但是加上的一个好处就是通常IDE会有错误提示,如果一个接口中有多于一个示实现的方法,例如:
@FunctionalInterface interface PositiveNumber<T>{ boolean test(T a); boolean test2(T a); }
则IDE通常会显示一个错误。
相关推荐
你可以通过提供的视频教程资源来深入学习Java函数式编程。该教程可能涵盖了上述所有概念,并提供了实践示例,帮助你更好地理解和应用函数式编程思想到实际项目中。 通过掌握这些核心概念和实践,你可以提升Java...
10. **学习资源**:要深入学习Java函数式编程,《Java函数式编程》_高清华这本书可能是很好的起点,它可能涵盖了Lambda表达式的使用、Stream API的实践以及如何在实际项目中应用函数式编程思维等内容。 通过理解和...
本套黑马程序员的Java函数式编程视频教程涵盖了Lambda表达式、Stream流以及函数式编程的核心概念,旨在帮助学习者全面掌握这一现代编程技术。 Lambda表达式是Java 8引入的关键特性,它允许我们以更简洁的方式定义...
《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...
Java Lambda 函数式编程是Java 8引入的一项重要特性,它极大地简化了处理函数对象的方式,使得代码更加简洁、易读。Lambda表达式是函数式编程的核心,它允许我们将函数作为一个参数传递,或者将函数作为返回值。在这...
读书笔记:java 函数式编程学习
### 深入理解Java函数式编程和Streams API #### 一、引言 随着Java 8的发布,函数式编程范式正式被引入到Java语言中,这标志着Java编程方式的重大转变。Java 8引入了Lambda表达式、方法引用等新特性,使得Java能够...
对于已经熟悉Java的开发者来说,学习JavaScript函数式编程不仅可以拓宽视野,也有助于提升在前端开发领域的专业技能。阅读相关书籍,例如"javascript函数式编程",将帮助你更好地掌握这些概念并应用于实际项目中。
Java 8是Java语言的一个重要版本,引入...在`java-8-lambdas-exercises-master`这个文件夹中,可能包含了多个示例,用于帮助学习者实践和掌握这些概念,通过编写和运行这些例子,可以深入理解Java 8的函数式编程特性。
基于Java 8的函数式编程学习项目 项目概述 本项目是基于Java 8的函数式编程学习项目,主要涵盖了Java 8中引入的Stream API、Lambda表达式、函数式接口、Optional类、时间API等特性。通过多个示例文件,展示了如何...
#### 二、函数式编程的历史背景 函数式编程的历史可以追溯到古希腊哲学家柏拉图的思想。文本中的对话展示了柏拉图试图引导一个年轻人理解抽象概念的方式。在这个对话中,柏拉图通过询问“两个物体是否能够完全相同...
【Java 8 函数式编程】是针对Java开发者的一本技术书籍,旨在介绍Java 8引入的函数式编程概念和特性。...通过学习这本书,Java开发者可以掌握Java 8的函数式编程技巧,提升代码质量和效率,适应现代软件开发的需求。
【Java 8函数式编程】 Java 8 是Java平台的一个重大更新,引入了多项新特性,其中最引人注目的就是对函数...对于已经熟悉Java SE的开发者来说,学习并应用Java 8的函数式编程特性,能够提升他们的编程效率和代码质量。
”中,作者提出了几个重要的观点来解释为什么Java开发者应该关注并学习函数式编程: - **并发编程的需求**:随着多核处理器的普及,编写高效、可维护的并发程序成为现代软件开发中的一个重要挑战。函数式编程提供了...
本资源"java8函数式编程学习源码"显然是为了帮助开发者深入理解并实践这些概念。下面我们将详细探讨其中的关键知识点。 1. **Lambda 表达式**: Lambda 表达式是 Java 8 中最具代表性的新特性,它提供了一种简洁的...
在Java世界中,虽然它最初设计为命令式语言,但自Java 8以来,已经引入了丰富的函数式编程特性,使得开发者能够充分利用这种编程风格。 **函数作为一等公民** 在函数式编程中,函数是第一等公民,意味着函数可以被...
【Java 8 函数式编程】是一本面向Java开发者,特别是对Java 8新特性感兴趣的程序员的专业书籍。作者Richard Warburton旨在打破函数式编程仅适用于小众开发者的观念,让更多的程序员能够理解和运用这一编程范式。书中...
Java 8是Java语言的一个重要版本,引入了...通过学习Java 8的函数式编程,开发者可以编写出更加简洁、高效、可读性更强的代码。理解并掌握上述特性,将有助于提升Java开发者的技能水平,并在实际项目中带来诸多便利。
这本书适合有编程基础,对函数式编程感兴趣的读者,无论你是Java开发者还是对新编程范式好奇的学习者,都可以从中了解到如何在Scala和Clojure中应用函数式编程来提高代码质量和效率。 【结论】 随着大数据时代的...