学习任务:

视频学习

Predicate介绍

测试Predicate

查看Predicate的源代码如下:

package 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);
    }
}

抽象方法boolean test(T t);输入一个参数到一个boolean类型的结果。Prediacte是一个判断接口,返回判断的结果。

package com.pbteach.javase.oop.lambda.test2;

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

/**
 * 测试Predicate
 * @author 攀博课堂(www.pbteach.com)
 * @version 1.0
 **/
public class TestPredicate {

    static int[] datas = {1,2,3,4,5,6,7};

    public static void main(String[] args) {
        //奇偶判断
        Predicate<Integer> filter1 = n -> {
          if(n % 2 ==0){
              return true;
          }else{
              return false;
          }
        };
        System.out.println("=======奇偶判断=======");
        int[] datas1 = doFilter(filter1, datas);
        for (int i = 0; i < datas1.length; i++) {
            System.out.println(datas1[i]);
        }
        //大于5的
        System.out.println("=======大于5的数=======");
        Predicate<Integer> filter2 = n -> n>5;
        int[] data2 = doFilter(filter2, datas1);
        for (int i = 0; i < data2.length; i++) {
            System.out.println(data2[i]);
        }
    }

    //过虑数列
    public static int[] doFilter(Predicate<Integer> filter,int[] datas){
        //定义一个新数组用于存储过虑后的数
        int[] result = new int[datas.length];
        int n=0;
        for (int i = 0; i < datas.length; i++) {
            //判断,满足条件则保留
            if(filter.test(datas[i])){
                result[n++] = datas[i];
            }
        }
        //根据过虑后的数量复制一个新数组
        int[] newresult = Arrays.copyOf(result, n);
        return newresult;
    }



}

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题