`

Lambda Expression - Predicate

    博客分类:
  • FP
 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2424767

 

Predicate

Predicate是一个谓词函数,主要作为一个谓词演算推导真假值存在,返回布尔值。

 

e.g.

package org.fool.java8;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiPredicate;
import java.util.function.IntPredicate;
import java.util.function.Predicate;

public class PredicateTest {

    private static List<Person> filter(List<Person> persons, Predicate<Person> predicate) {
        List<Person> result = new ArrayList<>();

        for (Person person : persons) {
            if (predicate.test(person)) {
                result.add(person);
            }
        }

        return result;
    }

    private static List<Person> filterByAge(List<Person> persons, IntPredicate predicate) {
        List<Person> result = new ArrayList<>();

        for (Person person : persons) {
            if (predicate.test(person.getAge())) {
                result.add(person);
            }
        }

        return result;
    }

    private static List<Person> filterByNameAndAge(List<Person> persons, BiPredicate<String, Integer> predicate) {
        List<Person> result = new ArrayList<>();

        for (Person person : persons) {
            if (predicate.test(person.getName(), person.getAge())) {
                result.add(person);
            }
        }

        return result;
    }

    private static class Person {
        private String name;
        private Integer age;

        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

    public static void main(String[] args) {
        List<Person> list = Arrays.asList(
                new Person("zhangsan", 18),
                new Person("lisi", 28));

        filter(list, person -> person.getAge().equals(18)).forEach(System.out::println);

        filterByAge(list, age -> age > 18).forEach(System.out::println);

        filterByNameAndAge(list, (name, age) -> name.equals("zhangsan") && age < 28).forEach(System.out::println);
    }
}

Console Output

Person{name='zhangsan', age=18}
Person{name='lisi', age=28}
Person{name='zhangsan', age=18}

 

 

 

  • 大小: 27.7 KB
分享到:
评论

相关推荐

    java8-lambda-expression-demo:演示lambda在Java 8中的用法

    本项目"java8-lambda-expression-demo"就是为了让开发者深入理解并实践这些新特性。 Lambda表达式允许我们以一种更简洁的方式定义匿名函数,即没有名字的函数。这种表达式的形式是`()-&gt;{主体代码}`,其中箭头左侧...

    lambda-java-translator

    1. 函数式接口:理解并使用Java提供的标准函数式接口,如`Function`, `Predicate`, `Consumer`等,以及如何自定义函数式接口。 2. Lambda表达式转换:学习如何将Lambda表达式转换为等价的传统匿名内部类,这对于...

    Lambda表达式.docx

    Lambda表达式的形式为:`(parameters) -&gt; expression`,其中`parameters`是函数参数,`-&gt;`是箭头符号,表示参数列表与函数体的分隔,`expression`是函数体,可以是单行代码或一个代码块。 2. **Lambda表达式的使用...

    Lambda表达式测试demo

    3. 使用`Predicate`接口进行条件判断,筛选列表中的元素。 4. 使用`Consumer`接口执行操作,但不返回结果,例如打印列表元素。 5. 使用`Supplier`接口创建新的对象,不接受参数,但返回一个值。 6. `Stream API`结合...

    Lambda表达式的例子

    Lambda表达式可以与Java的函数式接口配合使用,例如Runnable、Comparator、Predicate等。例如,如果我们想要创建一个在控制台打印消息的线程,可以这样做: ```java Runnable printTask = () -&gt; System.out.println...

    Lambda表达式学习,总结,速查手册大全.rar

    其基本语法格式为:(parameters) -&gt; expression,其中parameters是输入参数(可选),expression是函数体。例如,一个简单的Lambda表达式 `(int a, int b) -&gt; a + b` 表示接受两个整数并返回它们的和。 二、Lambda...

    java8中的Lambda表达式

    Java 8 中的 Lambda 表达式是语言的重大更新,它引入了函数式编程的概念,使得代码更加简洁、易读。Lambda 表达式的主要目的是简化处理匿名内部类的情况,尤其是当这些类只需要一个方法时。 在传统的 Java 编程中,...

    Java 1.8 lambda表达式示例源码

    这里,filter()方法接受一个谓词(Predicate),map()方法接受一个函数(Function),它们都是函数式接口,因此可以使用lambda表达式。 总而言之,Java 1.8的lambda表达式使得代码更简洁、更易读,它与函数式接口和...

    lambda.rar stream

    - 使用Predicate接口进行过滤操作,如找出年龄大于30的人。 - 使用Consumer接口进行消费操作,如打印元素信息。 "方法引用"是Lambda表达式的延伸,它允许我们直接引用已有方法,而不是手动编写相同的逻辑。比如,`...

    java8手把手教你学会写lambda表达式

    Runnable r2 = () -&gt; System.out.println("Running with Lambda expression"); ``` 总结,Lambda 表达式是 Java 8 中的一项重要改进,它让代码更简洁、易读,尤其在处理集合、并发和流操作时。通过熟练掌握 Lambda ...

    lambda_expression

    在 `lambda_expression-master` 文件中,可能包含了更多关于 Lambda 使用示例、实践案例以及如何在实际项目中有效利用 Lambda 进行编程的详细资料。通过学习和实践,你可以更好地理解和应用这一强大的功能。

    Java Lambda表达式

    Java标准库提供了一系列这样的接口,如`Runnable`, `Comparator`, `Predicate`, `Consumer`等,方便我们在不同场景下使用Lambda。 2. 省略参数类型:在Lambda表达式中,如果参数类型可以从上下文中推断出来,那么...

    Java系列JDK 1.8 新特性之 Lambda表达式.pdf

    Thread thread2 = new Thread(() -&gt; System.out.println("Hello from Lambda expression")); ``` #### 3、Lambda表达式 六种语法格式 Lambda表达式的语法非常灵活,以下列举了Lambda表达式的六种基本语法格式: #...

    Java8的lambda表达式

    (parameters) -&gt; expression 或 (parameters) -&gt; { statements; } ``` 1. 参数列表:类似于方法签名,无需类型声明,因为类型可以从上下文中推断出来。 2. 箭头符号:分隔参数列表和函数体。 3. 函数体:如果只有一...

    670.668.JAVA基础教程_动态代理与Java8新特性-Lambda表达式语法的使用(670).rar

    Lambda表达式可以与`Predicate`(用于过滤)、`Function`(用于映射)和`Consumer`(用于消费)等接口结合,实现数据处理的链式操作。 例如,以下代码展示了如何使用Lambda表达式和Stream API来找出一个整数列表中...

    Java8里面lambda的最佳实践Java开发Java经

    其语法形式为 `(parameters) -&gt; expression` 或 `(parameters) -&gt; { statements }`。参数列表在括号内,箭头后是函数体,可以是单行表达式或多行语句块。 二、函数式接口 Lambda表达式与函数式接口密切相关。函数式...

    Java 在哪里及如何使用Lambda.pdf

    Lambda表达式的基本形式是 `(parameters) -&gt; expression` 或 `(parameters) -&gt; { statements; }`。这里的`parameters`是传递给函数的参数,`expression`是单行的代码块,而`{ statements; }`则是多行代码块。在例子...

    java lambda函数式编程完成实例代码

    首先,Lambda表达式的语法结构为 `(parameters) -&gt; expression` 或 `(parameters) -&gt; { statements }`。这里的参数(parameters)和箭头(-&gt;)是可选的,如果参数只有一个且类型可以推断,那么可以省略参数的括号;如果...

    第17章 Lambda表达式与函数式接口2

    在Java 8之后,许多新的函数式接口被引入,如`Predicate`, `Function`, `Consumer`等,它们都是Stream API的重要组成部分。 **17.1.3 Stream API** Stream API是Java 8的另一大特性,它提供了处理集合数据的新方式...

Global site tag (gtag.js) - Google Analytics