重学java 76.JDK新特性 ② 函数式接口

Looking to the future is the order of the day, no worrying about old news

                                                                                                        —— 24.6.19

一、函数式接口

1.定义

        有且只有一个抽象方法的接口

2.检测

        @FunctionalInterface

3.示例

@FunctionalInterface
public interface USB {
    void open(String s);
}
public class Demo307Test01 {
    public static void main(String[] args) {
        method(new USB() {
            @Override
            public void open(String s) {
                System.out.println("开启了");
            }
        });
        System.out.println("——————————————————Lambda表达式———————————————————");
        method((String s) -> {
                System.out.println("Lamba表达式:开启了");
        });

        System.out.println("——————————————————Lambda表达式省略版———————————————————");
        method(s -> System.out.println("简化版:开启了"));
    }

    public static void method(USB usb){
        usb.open("鼠标");
    }
}

二、JDK自带的函数式接口

1.Supplier接口

1.supplier接口

        java.util.function.supplier<T>接口,它意味着"供给" -> 我们想要什么就给什么

2.方法:

        T get() -> 我们想要什么,get方法就可以返回什么

3.需求:

        使用supplier接口作为方法的参数

        用Lambda表达式求出int数组中的最大值

import java.util.Arrays;
import java.util.function.Supplier;

public class Demo308Supplier {
    public static void main(String[] args) {
        method(new Supplier<Integer>() {
            @Override
            public Integer get() {
                int[] arr = {4,3,4,6,7};
                Arrays.sort(arr);
                return arr[arr.length-1];
            }
        });

        method(() -> {
                int[] arr = {4,3,4,6,7};
                Arrays.sort(arr);
                return arr[arr.length-1];
        });
    }

    public static void method(Supplier<Integer> supplier){
        Integer value = supplier.get(); // 让get方法返回一个数组最大值
        System.out.println("value =" + value);
    }
}

4.泛型:

        <引用数据类型> -> 规定了我们操作的数据是什么类型

        <>中只能写引用数据类型,不能写基本数据类型

2.Consumer接口

        java.util.function.consumer<T> —> 消费型接口 —> 操作

方法:

        void accept(T t),意为消费一个指定泛型的数据

"消费"就是"操作”,至于怎么操作,就看重写accept方法之后,方法体怎么写了

示例:

import java.util.function.Consumer;

public class Demo309Consumer {
    public static void main(String[] args) {
        method(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s.length());
            }
        },"一切都会好的");

        System.out.println("——————————————————————————Lambda方法—————————————————————————");
        method(s -> System.out.println(s.length()),"一切都会好的");
    }
    public static void method(Consumer<String> consumer,String s){
        consumer.accept(s);
    }
}

3.Function

java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据

方法:

        R apply(T t) 根据类型T参数获取类型R的结果

import java.util.function.Function;

public class Demo310Function {
    public static void main(String[] args) {
        method(new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) {
                return integer+"";
            }
        },100);
    }

    public static void method(Function<Integer,String> function,Integer number){
        String s = function.apply(number);
        System.out.println("s = "+ (s+1));
    }
}

Lambda:

import java.util.function.Function;

public class Demo310Function {
    public static void main(String[] args) {
        method((Integer integer) -> integer+"",100);
    }

    public static void method(Function<Integer,String> function,Integer number){
        String s = function.apply(number);
        System.out.println("s = "+ (s+1));
    }
}

4.Predicate

java.util.function.Predicate<T>接口 —> 判断型接口

        boolean test(T t) —> 用于判断的方法,返回值为boolean型

import java.util.function.Predicate;

public class Demo311Predicate {
    public static void main(String[] args) {
        method((String s) -> s.length() == 7,"一切都会好的");
    }
    public static void method(Predicate<String> predicate, String str) {
        boolean test = predicate.test(str);
        System.out.println("test = " + test);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值