前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java8第二篇

java8第二篇

作者头像
码农王同学
发布2020-03-25 11:53:04
2880
发布2020-03-25 11:53:04
举报
文章被收录于专栏:后端Coder

Predicate断言式,判断是否符合指定的条件。个人感觉这个函数式接口,常用于集合的过滤操作,我们可以看下其提供的方法都有哪些。

代码语言:javascript
复制
packge java.util.function;
import java.util.Objects;
@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
     
    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }
    
    default Predicate<T> negate() {
        return (t) -> !test(t);
    }

    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }

    static <T> Predicate<T> isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }
}

下面我们看下在示例程序中如何使用它的吧。

代码语言:javascript
复制
package com.wpw.java8;

import lombok.extern.slf4j.Slf4j;

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

/**
 * @author pc
 */
@Slf4j
public class PredicatedTest {

    private static void print(Object object) {
        System.out.println("object = " + object);
    }

    public static void main(String[] args) {
        Predicate<String> predicate = item -> "java函数式接口Predicate".equals(item);
        log.info("test()方法:{}", predicate.test("java函数式接口Predicate"));
        List<Integer> list = new ArrayList<>(10);
        final int size = 10;
        for (int i = 1; i <= size; i++) {
            list.add(i);
        }
        log.info("Predicate返回一个List中的偶数");
        Object[] result = list.stream().filter(x -> x % 2 == 0).toArray();
        print(Arrays.toString(result));
        /**测试Predicate的and方法,打印list中大于3,小于6的数字*/
        Object[] array = list.stream().filter(x -> x > 3 && x < 6).toArray();
        print(Arrays.toString(array));
        /**测试Predicate的or方法,打印list中小于3或者大于5的数字*/
        Object[] objects = list.stream().filter(x -> x < 3 || x > 5).toArray();
        print(Arrays.toString(objects));
        /**测试Predicate的negate方法,返回list中大于等于3,小于等于5的数字*/
        Object[] toArray = list.stream().filter(x -> x >= 3 && x <= 5).toArray();
        print(Arrays.toString(toArray));
        Predicate<Object> objectPredicate = Predicate.isEqual("java8");
        boolean flag = objectPredicate.test("java8");
        log.info("flag:{}", flag);
    }
}

还是感觉上面的用法很实用,为了验证单一方法的测试,这里也简单给出一个示例程序。

代码语言:javascript
复制
        log.info("单一方法进行测试and,or,negate");
        Predicate<Integer> andOperator = x -> x > 3;
        andOperator.and(x -> x <= 10);
        print(Arrays.toString(list.stream().filter(andOperator).collect(Collectors.toList()).toArray()));
        Predicate<Integer> orOperator = x -> x < 3;
        orOperator.or(x -> x > 6);
        print(Arrays.toString(list.stream().filter(orOperator).collect(Collectors.toList()).toArray()));
        Predicate<Integer> negateOperator = x -> x < 10;
        negateOperator.negate();
        print(Arrays.toString(list.stream().filter(negateOperator).collect(Collectors.toSet()).toArray()));
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档