Java SE8 Lambda 基础入门---两个函数式接口:Predicate、Consumer
来源:互联网 发布:计算机的发展史知乎 编辑:程序博客网 时间:2024/06/06 07:29
Interface Predicate < T >
@FunctionalInterface
public interface Predicate
Represents a predicate (boolean-valued function) of one argument.
This is a functional interface whose functional method is test(Object).
java doc 说得很清楚,Predicate这个函数式接口,接受一个变量,返回boolean值,而要实现的这个函数式方法就是test(Object)方法,怎么用看示例:
package com.tangym.learnlambda.FunctionalInterfaces;import java.util.function.Predicate;public class PredicateExample { public static void main(String[] args) { // test方法 Predicate<String> i = (s) -> s.length() > 5; System.out.println(i.test("123456")); //使用lambda表达式 performConditionally(p -> p > 2); } private static void performConditionally(Predicate<Integer> predicate) { int[] a = { 0, 1, 3 }; for (int p : a) { if (predicate.test(p)) { System.out.println(p);//out:3 p > 2的只有3 } } }}
初次用这个接口可能会有点抽象,耐心点看下例子,自己动手运行下。
Interface Consumer < T >
@FunctionalInterface
public interface Consumer
Represents an operation that accepts a single input argument and returns no result. Unlike most other functional interfaces, Consumer is expected to operate via side-effects.
This is a functional interface whose functional method is accept(Object).
上面说了,这个函数式接口啊,接受一个参数,但是没有返回值,通过副作用去发挥效果(下面解释),函数式方法是accept(Object),我们写lambda表达式,要把这个方法给实现了。
“Consumer is expected to operate via side-effects.” 这句话怎么理解,先介绍下什么叫 纯函数。
纯函数就是显示的 有输入,有输出的函数。好了,我们这个函数接口没有输出,那么它肯定就要改变一些什么,改变的这个就叫做 side-effects 副作用(副作用不全是坏的)。
Consumer的副作用则是改变了数据状态(理解错误,请速度指正我)。
使用看例子:
package com.tangym.learnlambda.FunctionalInterfaces;import java.util.function.Consumer;import java.util.function.Predicate;public class ConsumerExample { public static void main(String[] args) { //简单使用,直接用Consumer写一个lambda表达式 Consumer<String> c = (x) -> System.out.println(x.toLowerCase());//out:test1 test2 c.accept("TesT1"); c.accept("TesT2"); //调用自己构造的静态方法 performConditionally(p->p>2,p->System.out.println(p));// } private static void performConditionally(Predicate<Integer> predicate,Consumer<Integer> consumer) { int[] a = { 0, 1, 3,4 }; for (int p : a) { if (predicate.test(p)) { //将满足条件p>2的,全部给consumer.accept(),consumer类型的lambda表达式则会把accept的参数全部执行 consumer.accept(p); } } }}
对应的还有一个BiConsumer的函数式接口,是接受两个入参,用法相同。
- Java SE8 Lambda 基础入门---两个函数式接口:Predicate、Consumer
- Java SE8 Lambda 基础入门---初识lambda
- Java SE8函数式接口与Lambda表达式
- Java SE8 Lambda 基础入门---方法引用
- Java SE8 Lambda 基础入门---forEach
- Java SE8 Lambda 基础入门---Stream
- Java SE8 Lambda 基础入门---为什么需要lambda
- Java SE8 Lambda 基础入门---怎么写lambda表达式
- Java SE8 Lambda 基础入门---lambda表达式的类型是什么
- Java SE8 Lambda 基础入门---lambda表达式中的异常处理
- Java SE8:Lambda快速入门
- java的lambda表达式、匿名类,Predicate接口,Consumer接口的应用
- Java SE8 Lambda 基础入门---lambda表达式与匿名内部类
- Java SE8 Lambda 基础入门---lambda表达式与闭包(closure)
- Function,Consumer,Predicate 接口
- 【java】【java8】Lambda、Stream、Function、Consumer、Predicate、Supplier
- Java JVM(七):Function,Consumer,Predicate 接口
- Java JVM(七):Function,Consumer,Predicate 接口
- MyEclipse 10 代码提示
- Uva 10888 Warehouse(KM)
- 用随机数选人(几行没有任何技术含量的代码)
- VueJS(2)--创建工程
- BZOJ 1227: [SDOI2009]虔诚的墓主人 树状数组 组合数
- Java SE8 Lambda 基础入门---两个函数式接口:Predicate、Consumer
- Coreldraw修改平面图独到漂亮见解就在这里了
- 移动端车牌号识别技术介绍
- 配置JDK和Tomcat
- 机器翻译的评价标准BLEU(Evaluation criteria for machine translation)
- Java实现打印实心与空心菱形
- 计算机科学基本概念
- 【软件工程导论】软件工程导论第三章小结
- tyvj4875 排列(单调栈)