Java8新特性之四大内置核心函数式接口

一. Consumer: 消费型接口

void accept(T t);

@Test
public void test1(){
    operate(100,(x)->{
        System.out.println(x*x);
    });
    operate(100,(x)->{
        System.out.println(x/x);
    });
}

public void operate(double money, Consumer<Double> consumer){
    consumer.accept(money);
}

二. Supplier: 供给型接口

T get();

    @Test
    public void test2(){
        List<Integer> numList = getNumList(10, () -> {
            return (int) (Math.random() * 100);
        });
        for (Integer num : numList) {
            System.out.println(num);
        }
    }

    //产生指定个数的整数并放入集合中。
    public List<Integer> getNumList(int num, Supplier<Integer> supplier){
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i < num; i++) {
            list.add(supplier.get());
        }
       return list;
    }

三. Function<T,R>: 函数型接口

R apply(T t);

@Test
public void test3(){
    String s1 = strHandler("\t\t\tfjhnb ", (str) -> {
        return str.trim();
    });
    System.out.println(s1);

    String s2 = strHandler("fjhnb",(str)->{
        return str.substring(3,5);
    });
    System.out.println(s2);
}

//用于处理字符串
public String strHandler(String str, Function<String,String> function){
    return function.apply(str);
}

四. Predicate: 断言型接口

boolean test(T t);

@Test
public void test4(){
    List<String> list = Arrays.asList("FJH", "nb", "One","English","Apple");
    List<String> filterList = filterStr(list, (str) -> {
        return str.length() > 3;
    });
    for (String s : filterList) {
        System.out.println(s);
    }
}

//将满足条件的字符串,放入集合中去
public List<String> filterStr(List<String> list, Predicate<String> predicate){
    List<String> strList = new ArrayList<>();
    for (String str : list) {
        if (predicate.test(str)){
            strList.add(str);
        }
    }
    return strList;
}

posted @ 2021-07-16 15:40  fjhnb  阅读(235)  评论(0)    收藏  举报