12.内部类(五)

8.内建函数式接口

在方法引用的操作过程中,可以发现,不管如何操作,对于可能出现的函数式接口的方法最多只有4类:有参数有返回值、有参数无返回值、无参数有返回值、判断真假。所以为了简化开发者的定义以及操作的统一,从JDK1.8开始提供了一个新的开发包:java.util.function,在此包中提供了许多内置的函数式接口,下面通过具体的范例来解释4个核心函数式接口的使用。

提示:java.util.function包中存在有大量类似功能的其他接口。

在4个函数式接口内部除了指定的抽象方法之外,还提供了一些default或static方法。另外,在java.util.function包中的核心接口之上,也定义接收更多参数的函数式接口。

(1)功能型函数式接口:该接口的主要功能是进行指定参数的接收并且可以返回处理结果。

@FunctionalInterface
public interface Function<T,R>{            //定义功能型接口,设置参数与返回结果类型
    public R apply(T t);                   //接收参数并返回处理结果
}

范例:使用功能型函数式接口

本次将引用String类中判断是否以指定字符串开头的方法:public boolean startsWith(String str)。

package cn.kuiba.util;
import java.util.function.*;
public class Main {
    public static void main(String args[]){
        //引用startsWith()方法,该方法将接收一个String型参数,并返回Boolean类型
        Function<String,Boolean>function="**kuiba"::startsWith;
        System.out.println(function.apply("**"));   //调用方法
    }
}


程序执行结果:
true

        如果要使用功能型函数式接口,必须保证有一个输入参数并且有返回值,由于映射的是String类的startsWith()方法,所以此方法使用时必须传入参数(String型),同时要返回一个判断结果(boolean型)。

(2)消费型函数式接口:该接口主要功能是进行参数的接收与处理,但是不会有返回结果。

@FunctionalInterface
public interface Consumer<T>{    //消费型函数式接口,只需设置参数类型即可
    public void accept(T t);     //接收一个参数,并且不需要返回处理结果,适合于引用类型操作
}

范例:使用消费型函数式接口

本次将引用System.out.println()方法进行内容输出。

package cn.kuiba.util;
import java.util.function.*;
public class Main {
    public static void main(String args[]){
        //System是一个类,out是里面的成员属性,println()是out对象中的方法
        Consumer<String>consumer=System.out::println;   //输出方法只需接收参数,不需要返回值
        consumer.accept("www.kuiba.cn");             //信息输出
    }
}


程序执行结果:
www.kuiba.cn

        本程序利用消费型函数式接口接收了System.out.println()方法的引用,此方法定义中需要接收一个String类型数据,但是不会返回任何结果。

(3)供给型函数式接口:该接口的主要功能是方法不需要接收参数,并且可以进行数据返回。

@FunctionalInterface
public interface Supplier<T>{        //供给型函数式接口,设置返回值类型
    public T get();                  //不接收参数,但会返回数据
}

范例:使用供给型函数式接口

本次将引用String类中的字符串转小写方法:public String toLowerCase()。

package cn.kuiba.util;
import java.util.function.*;
public class Main {
    public static void main(String args[]){
        //toLowerCase()方法不需要接收参数,会将当前String类对象的内容进行转换
        Supplier<String>supplier="www.KUIBA.cn"::toLowerCase;
        System.out.println(supplier.get());     //获取数据
    }
}

程序执行结果:
www.kuiba.cn

        本程序使用了供给型函数式接口,此接口上不需要接收参数,所以直接利用String类的实例化对象引用toLowerCase()方法,当调用了get()方法后就可实现大写转换操作。

(4)断言型函数式接口:断言型函数式接口主要是进行判断操作,本身需要接收一个参数,同时会返回一个boolean结果。

@FunctionalInterface
public interface Predicate<T>{        //断言型函数式接口,需要设置判断的数据类型
    public boolean test(T t);         //逻辑判断
}

范例:使用断言型函数式接口

本次将引用String类中的忽略大小写比较方法:public boolean equalsIgnoreCase(String str)。

package cn.kuiba.util;
import java.util.function.*;
public class Main {
    public static void main(String args[]){
        //equalsIgnoreCase()方法需要接收一个字符串型数据,并且与当前String类对象内容进行比较
        Predicate<String>predicate="kuiba"::equalsIgnoreCase;
        System.out.println(predicate.test("KUIBA"));        //判断调用
    }
}

程序执行结果:
true

        本程序直接将String类的equalsIgnoreCase()这个普通方法利用断言型函数式接口进行引用,而后进行忽略大小写比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值