使用lambda表达式创建Predicate接口对象实现多种功能

本文通过具体的Java代码示例展示了如何使用Predicate接口与lambda表达式来处理数组中的整数元素,并实现不同条件下的计数功能。

实例代码:

import java.util.function.Predicate;

public class Test07 {
    public static void main(String[] args) {
        //已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213}
        //a)   使用lambda表达式创建Predicate对象p1,p1能判断整数是否是自然数(大于等于0)
        //b)   使用lambda表达式创建Predicate对象p2,p2能判断整数的绝对值是否大于100
        //c)   使用lambda表达式创建Predicate对象p3,p3能判断整数是否是偶数
        //     遍历arr,仅利用已创建的Predicate对象(不使用任何逻辑运算符),完成以下需求
        //i.   打印自然数的个数
        //ii.  打印负整数的个数
        //iii. 打印绝对值大于100的偶数的个数
        //iv.  打印是负整数或偶数的数的个数
        Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213};
        Predicate<Integer> p1 = a -> a >= 0;//p1能判断整数是否是自然数(大于等于0)
        Predicate<Integer> p2 = a -> Math.abs( a ) >= 100;//p2能判断整数的绝对值是否大于100
        Predicate<Integer> p3 = a -> a % 2 == 0;//p3能判断整数是否是偶数
        int count = 0;//定义变量保存自然数的个数
        for (int a : arr) {
            if (p1.test(a)) {//如果是自然数
                count ++;
            }
        }
        System.out.println("自然数的个数: "+count);
        System.out.println("负整数的个数: "+(arr.length - count));
        int number = 0;//定义变量用来保存绝对值大于100的偶数的个数
        for (int a : arr) {
            if (p2.test(a)) {//绝对值大于100
                if (p3.test(a)) {//是偶数
                    number ++;
                }
            }
        }
        System.out.println("绝对值大于100的偶数的个数: "+number);

        int number1 = 0;//定义变量用来保存负整数或偶数的数的个数
        for (int a : arr) {
            if (!p1.test(a)) {//是负整数
                number1 ++;
            } else if (p3.test(a)) {
                number1 ++;
            }
        }
        System.out.println("负整数或偶数的数的个数: "+number1);

    }
}

控制台打印效果:

好的,下面再给您提供几个Lambda表达式作为Predicate实现的代码示例。 1. 筛选出字符串长度大于3的元素: ``` List<String> list = Arrays.asList("apple", "banana", "orange", "pear", "grape"); Stream<String> stream = list.stream().filter(s -> s.length() > 3); stream.forEach(System.out::println); ``` 输出结果为: ``` apple banana orange grape ``` 2. 筛选出年龄大于18岁的人: ``` List<Person> list = Arrays.asList( new Person("Tom", 20), new Person("Jerry", 16), new Person("Alice", 22), new Person("Bob", 18), new Person("Mike", 25) ); Stream<Person> stream = list.stream().filter(p -> p.getAge() > 18); stream.forEach(System.out::println); ``` 其中,Person是一个自定义的类,包含姓名和年龄两个属性,以及相应的get方法。输出结果为: ``` Tom, 20 Alice, 22 Mike, 25 ``` 3. 筛选出价格大于1000并且库存大于0的商品: ``` List<Product> list = Arrays.asList( new Product("iPhone", 8000, 100), new Product("iPad", 5000, 0), new Product("MacBook", 12000, 50), new Product("iWatch", 3000, 200), new Product("AirPods", 1200, 0) ); Stream<Product> stream = list.stream().filter(p -> p.getPrice() > 1000 && p.getStock() > 0); stream.forEach(System.out::println); ``` 其中,Product是一个自定义的类,包含商品名称、价格、库存三个属性,以及相应的get方法。输出结果为: ``` iPhone, 8000, 100 MacBook, 12000, 50 iWatch, 3000, 200 ``` 以上就是Lambda表达式作为Predicate实现的几个示例,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值