Java基础知识【12】_函数式接口

本文介绍了Java中的函数式接口,包括Supplier、Consumer、Predicate和Function接口的使用方法和示例。通过这些接口,可以更好地理解和应用Java的Lambda表达式进行函数式编程。
摘要由CSDN通过智能技术生成

Java基础知识_函数式接口

概述

函数式接口:有且仅有一个抽象方法的接口,Java中函数式编程体现就是lambda表达式,所以函数式接口就是适用于lambda使用的接口

注解:

@FunctionalInterface

常见的四个接口

Supplier接口

Supplier :包含一个无参的方法

T get():获得结果,该方法不需要参数

/**
 * @author ming
 * @date 2022-07-18 16:49
 */
public class SupplierDemo {
    public static void main(String[] args) {
        //String s = getString(new Supplier<String>() {
        //    @Override
        //    public String get() {
        //        return "小明";
        //    }
        //});
        String s = getString(() -> "小明");
        System.out.println(s);
        Integer i = getInteger(() -> 18);
        System.out.println(i);

    }
    private static String getString(Supplier<String> s){
        return s.get();
    }
    private static Integer getInteger(Supplier<Integer> s){
        return s.get();
    }
}

Consumer接口

Consumer 表示接受单个输入参数并且不返回结果的操作。 与大多数其他功能界面不同, Consumer预计将通过副作用进行操作。包含两个方法:

  • accept(T t)

    对给定的参数执行此操作。

  • andThen(Consumer<? super T> after)
    返回一个组合的 Consumer ,按顺序执行该操作,然后执行 after操作。

/**
 * @author ming
 * @date 2022-07-18 17:10
 */
public class ConsumerDemo {
    public static void main(String[] args) {
        operatorString("小明",name ->{
            System.out.println(name);
        });
        operatorString("小明",name-> System.out.println(name),name -> System.out.println(new StringBuffer(name).reverse().toString()));
    }
    private static void operatorString(String name, Consumer<String> con1,Consumer<String> con2){
        //con1.accept(name);
        //con2.accept(name);
        con1.andThen(con2).accept(name);//做了两次accept
    }
    private static void operatorString(String name, Consumer<String> con){
        con.accept(name);
    }
}

Predicate接口

Predicate 表示一个参数的谓词(判断,返回布尔值函数)

方法:

  • boolean test(T t)
    在给定的参数上评估这个谓词。
  • and(Predicate<? super T> other)
    返回一个组合的谓词,表示该谓词与另一个谓词的短路逻辑AND。
  • or(Predicate<? super T> other)
    返回一个组合的谓词,表示该谓词与另一个谓词的短路逻辑或。
  • negate()
    返回表示此谓词的逻辑否定的谓词。
  • isEqual(Object targetRef)
    返回根据 Objects.equals(Object, Object)测试两个参数是否相等的 谓词 。
/**
 * @author ming
 * @date 2022-07-18 17:31
 */
public class PredicateDemo {
    public static void main(String[] args) {
        boolean b1 = checkString("hello",s -> s.length()>0);
        System.out.println(b1);

        boolean b2 = checkString("helloworld",s -> s.length()>10,s -> s.length()<15);
        System.out.println(b2);

    }
    private static boolean checkString(String s, Predicate<String> pre){
        return pre.test(s);
    }
    private static boolean checkString(String s, Predicate<String> pre1,Predicate<String> pre2){
        return pre1.and(pre2).test(s);
    }
}

Function接口

Function<T,R> T - 函数输入的类型 R - 函数的结果类型 表示接受一个参数并产生结果的函数。

方法:

  • andThen(Function<? super R,? extends V> after)
    返回一个组合函数,首先将该函数应用于其输入,然后将 after函数应用于结果。
  • apply(T t)
    将此函数应用于给定的参数。
  • compose(Function<? super V,? extends T> before)
    返回一个组合函数,首先将 before函数应用于其输入,然后将此函数应用于结果。
  • identity()
    返回一个总是返回其输入参数的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值