首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Lambda表达式和接口的简单Java 8 Predicate示例

大量的Java编程涉及到对真或假值的评估,从条件语句到迭代循环。当您使用JDK的Streams API和Lambda函数时,可以使用备受欢迎的Java Predicate接口来简化布尔条件的评估。

也被称为Java 8 Predicate(源自引入函数式编程的JDK版本),这个简单的接口定义了五个方法,尽管只有Java Predicate的test方法在Stream或Lambda调用中被评估。

图1:Java 8 Predicate接口的五个方法的JavaDoc列表

传统的Java 8 Predicate示例:

尽管Java 8的Predicate是一个函数式接口,但开发人员仍可以以传统方式使用它。下面是一个Java Predicate示例,它简单地创建了一个扩展Predicate接口的新类,并在其主方法中使用Predicate的单独类:

import java.util.function.*;

public class Java8PredicateTutorial {

public static void main(String args[]) {

PredicateExample example = new PredicateExample();

System.out.printf("Gretzky's number is even: %s", example.test(99));

boolean value = example.test(66);

System.out.printf("nLemieux's number is even: %s ", value);

}

}

class PredicateExample implements Predicate {

public boolean test(Integer x) {

if (x%2==0){

return true;

} else {

return false;

}

}

}

图2:如何编译和运行Java 8 Predicate示例

图2展示了编译和执行这个Predicate接口教程时的结果。

Java Predicate作为内部类:

如果您是一个喜欢内部类的开发人员,您可以对此进行一些简化,减少示例的冗长性。然而,这个Java 8 Predicate示例并不完全符合函数式编程的要求。

import java.util.function.*;

public class Java8PredicateTutorial {

public static void main(String args[]) {

Predicate predicateExample = new Predicate() {

public boolean test(Integer x) {

return (x % 2 == 0);

}

};

System.out.printf("Gretzky's number is even: %s", predicateExample.test(99));

System.out.printf("nLemieux's number is even: %s ", predicateExample.test(66));

}

}

Java Predicate lambda 示例

当然,如果您正在学习Java 8的Predicate接口,您很可能对如何在Lambda函数中使用它感兴趣。

Lambda表达式的目标是减少Java代码的冗长性,特别是在需要覆盖只有一个功能方法的接口的情况下。以下是使用Lambda表达式创建Java Predicate的代码示例:

Predicate lambdaPredicate = (Integer x) -> (x % 2 == 0);

与传统的接口创建方法相比,毋庸置疑,Lambda表达式更加简洁。

以下是完整的使用Lambda表达式实现的Java Predicate示例:

import java.util.function.*;

public class Java8PredicateTutorial {

public static void main(String args[]) {

/* Java predicate lambda example */

Predicate lambdaPredicate = (Integer x) -> (x % 2 == 0);

System.out.printf("Gretzky's number is even: %s", lambdaPredicate.test(99));

System.out.printf("nLemieux's number is even: %s ", lambdaPredicate.test(66));

}

}

Java Predicate 和 lambda 流

自从JDK 8发布以来,函数式表达式已经在Java API中广泛应用。Streams API广泛使用Lambda表达式和Java Predicate,其中过滤表达式(filter expression)就是其中之一。下面是一个使用Lambda表达式、Stream和Predicate的示例,从一个Integer对象的列表中提取出所有的偶数:

import java.util.function.*;

import java.util.*;

import java.util.stream.*;

public class LambdaPredicateStreamExample {

public static void main(String args[]) {

List jerseys = Arrays.asList(99, 66, 88, 16);

/* Java predicate and lambda stream example usage */

List evenNumbers =

jerseys.stream()

.filter( x -> ((x%2)==0))

.collect(Collectors.toList());

/* The following line prints: [66, 88, 16] 8 */

System.out.println(evenNumbers);

}

}

正如您所看到的,Java的Lambda函数、流(Streams)和Predicate接口的组合使用可以创建非常紧凑的代码,既强大又易于阅读。

--------------------------------------------------------------------------

【注】本文译自:

https://www.theserverside.com/video/A-simple-Java-8-Predicate-lambda-interface-with-examples

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OodxXhl0OQS0Evd3Cb-nQVyg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券