java8 Predicate源码学习

看别人写的用法真蛋疼。

主要自己定义Predicate的与或运算

code

public Predicate mypredicateand(Predicate predicate1, Predicate predicate2) {
        Objects.requireNonNull(predicate2);
        return (x) -> predicate1.test(x) && predicate2.test(x);
    }

    public Predicate mypredicateor(Predicate predicate1, Predicate predicate2) {
        Objects.requireNonNull(predicate2);
        return (x) -> predicate1.test(x) || predicate2.test(x);
    }

test

  @Test
    public void testMyPredicateand() {
        Predicate<String> predicate1 = new Predicate<String>() {
            @Override
            public boolean test(String o) {
                return o.length() >= 5;
            }
        };
        Predicate<String> predicate2 = new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() <= 7;
            }
        };
        Predicate<String> predicate = mypredicateand(predicate1, predicate2);
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("OTHKJ");
        list.add("12345678");
        list.add("12345");
        list.add("123876533");
        list.add("123");
        System.out.println(list);
        Object[] result = list.stream().filter(predicate).toArray();
        for (Object obj : result)
            System.out.println(obj);
    }

    @Test
    public void testMyPredicateor() {
        Predicate<String> predicate1 = new Predicate<String>() {
            @Override
            public boolean test(String o) {
                return o.length() < 5;
            }
        };
        Predicate<String> predicate2 = new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() > 7;
            }
        };
        Predicate<String> predicate = mypredicateor(predicate1, predicate2);
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("OTHKJ");
        list.add("12345678");
        list.add("12345");
        list.add("123876533");
        list.add("123");
        System.out.println(list);
        Object[] result = list.stream().filter(predicate).toArray();
        for (Object obj : result)
            System.out.println(obj);
    }

result

[a, OTHKJ, 12345678, 12345, 123876533, 123]
OTHKJ
12345
[a, OTHKJ, 12345678, 12345, 123876533, 123]
a
12345678
123876533
123

转载于:https://my.oschina.net/xd03122049/blog/860808

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值