jdk1.8新特性——四大内置核心函数式接口

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.8新特性——四大内置核心函数式接口相关的知识,希望对你有一定的参考价值。

一、jdk1.8内置的四大核心函数式接口

  • Consumer : 消费型函数式接口,指方法有参数但是无返回值(即有去无回)。

    void accept(T t);
    
  • Supplier : 供给型函数式接口,指方法无参数但是有返回值(即只知道获取返回值)。

     T get();
    
  • Function<T, R> : 函数型函数式接口,指方法有参数且有返回值(即有去有回)。

     R apply(T t);
    
  • Predicate : 断言型函数式接口,指方法有参数且返回值为boolean类型。

    boolean test(T t);
    

二、消费型函数式接口示例

1、以Consumer接口类中的accept方法举例

2、示例代码如下:

package com.xz.springboot_java8.day4;
import java.util.function.Consumer;
/**
 * @description: 消费型函数式接口示例(方法有参数但是无返回值)
 * @author: xz
 */
public class Test1 {
    public static void main(String[] args) {
        getConsumer(1000,(x)-> System.out.println("xz游戏充值消费了【"+x+"】元"));
    }

    /**
     * @param money 消费金额
     * @param consumer 函数式接口
     */
    public static  void getConsumer(double money, Consumer<Double> consumer){
        consumer.accept(money);
    }
}

3、运行main函数,输出结果如下图:

三、供给型函数式接口示例

1、以Supplier接口类中的get方法举例

2、示例代码如下:

package com.xz.springboot_java8.day4;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
/**
 * @description: 供给型函数式接口(方法无参数但是有返回值)
 * @author: xz
 */
public class Test2 {
    public static void main(String[] args) {
        List<Integer> listNumber = getListNumber(20, () -> (int)(Math.random() * 100));
        for(Integer num:listNumber){
            System.out.println(num);
        }
    }

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

3、运行main函数,输出结果如下图:

四、函数型函数式接口示例

1、以Function接口类中的apply方法举例

2、示例代码如下:

package com.xz.springboot_java8.day4;
import java.util.function.Function;
/**
 * @description: 函数型函数式接口(方法有参数且有返回值)
 * @author: xz
 */
public class Test3 {
    public static void main(String[] args) {
        String str=getStrHandler("jdjdkka",(x)->x.substring(2, 5));
        System.out.println(str);
    }

    /**
     * @param str 传入的字符串
     * @param function
     * @return
     */
    public static String getStrHandler(String str, Function<String,String> function){
        return function.apply(str);
    }

}

3、运行main函数,输出结果如下图:

五、断言型函数式接口示例

1、以Predicate接口类中的test方法举例

2、示例代码如下:

package com.xz.springboot_java8.day4;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
/**
 * @description:  断言型函数式接口(方法有参数且返回值为boolean类型)
 * @author: xz
 */
public class Test4 {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("java", "jdk", "jre", "spring");
        List<String> strList = getFilterStr(list, (x) -> x.length() > 3);
        for (String str : strList) {
            System.out.println(str);
        }
    }

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

3、运行main函数,输出结果如下图:

以上是关于jdk1.8新特性——四大内置核心函数式接口的主要内容,如果未能解决你的问题,请参考以下文章

jdk1.8新特性(四大函数式接口与Stream流式计算)

JDK1.8新特性:函数式接口

Java8新特性——Lambda表达式之四大核心函数式接口 & 方法/构造器/数组引用

Java8新特性——Lambda表达式之四大核心函数式接口 & 方法/构造器/数组引用

快来看看!!JDK1.8新特性之函数式接口

Java新特性解读JDK8之函数式接口Function