Java 8 新特性之函数式接口

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java 8 新特性之函数式接口脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1. 概述

1.1 简介

在开发中使用 Lambda 表达式时,我们如果每次都自己定义函数接口也是一件很麻烦的事情,所以java 8 已经提供了一个函数式接口供我们来使用。最常用的接口包括 Function<T, R>Predicate<T>Supplier<T>Consumer<T>,它们是在 java.util.function 包中定义的,平常基本的使用都是可以满足的,如果再有其它满足不了的需求,再进行自定义接口

2. 内置函数接口

2.1 Consumer<T> 消费型接口

只有一个参数,且没有返回值的函数

/**  * 表示接受单个输入参数且不返回结果的操作。  *  * @param <T> 输入到操作的类型  */ @FunctionalInterface public interface Consumer<T> {      void accept(T t); }

1. 实例

@test public void t1(){     handle(100,(x) -> System.out.println("handle result : " + x * x)); }  public void handle(Integer m,Consumer<Integer> consumer) {     consumer.accept(m); }

2.2 Supplier<T> 供给型接口

没有参数,且只有一个返回值的函数

/**  * 表示结果的提供者。  *  * 没有要求每次调用供应商时都返回一个新的或不同的结果。  *   * @param <T> supplier 返回结果的类型  */ @FunctionalInterface public interface Supplier<T> {      T get(); }

1. 实例

产生指定个数的随机整数,并放入到集合中

@Test public void t2(){     List<Integer> list = getRandomNumList(10,() -> (int)(Math.random() * 100));     System.out.println(list.toString()); }  public List<Integer> getRandomNumList(Integer limit, Supplier<Integer> supplier) {     List<Integer> list = new ArrayList<>();     for (int i = 0 ; i < limit ; i++){         list.add(supplier.get());     }     return list; }

2.3 Function<T, R> 函数型接口

有一个参数和一个返回值的函数

/**  * 表示接受一个参数并生成结果返回的函数。  *  * @param <T> 函数的输入类型  * @param <R> 函数的返回类型  */ @FunctionalInterface public interface Function<T, R> {      R apply(T t); }

1. 实例

根据规则处理字符串

@Test public void t3() {     // 去除空格     String str = strHandler(" abcdef    ",(x) -> x.trim());     System.out.println("*" + str + "*"); }  /**  * 根据规则处理字符串  *  * @param str 待处理字符串  * @param func Function 函数  * @return 处理结果  */ public String strHandler(String str, Function<String,String> func) {     return func.apply(str); }

2.4 Predicate<T> 断言型接口

/**  * 布尔值函数。  *  * @param <T> 被判断对象的类型  */ @FunctionalInterface public interface Predicate<T> {      boolean test(T t); }

1. 实例

过滤满足条件的整数并返回

@Test public void t4() {     List<Integer> initList = Arrays.asList(3,2,45,32,1,30,10,49,48,6,7,0,8);     List<Integer> list = filterNum(initList,(x) -> x > 10);     System.out.println("list : " + list.toString()); }  /**  * 过滤满足条件的整数并返回  *  * @param list  * @param predicate  * @return  */ public List<Integer> filterNum(List<Integer> list, Predicate<Integer> predicate) {     List<Integer> resList = new ArrayList<>();     for (int i : list) {         if (predicate.test(i)) {             resList.add(i);         }     }     return resList; }

2.5 其他接口

函数式接口 参数类型 返回类型 用途
BiFunction<T, U, R> T, U R 对类型为 T, U 参数应用操作,返回 R 类型的结果,包含方法为 R apply(T t,U u)
Unaryoperator<T> (Function 子接口) T T 对类型为 T 的对象进行一元运算,并返回 T 类型的结果,包含方法为 T apply(T t)
BinaryOperator<T> (BiFunction 子接口) T, T T 对类型为 T 的对象进行二元运算,并返回 T 类型的结果,包含方法为 T apply(T t1, T t2)
BiConsumer<T, U> T, U void 对类型为 T, U 应用操作,包含方法为 void accept(T t, U u)
ToIntFunction<T> T int 计算 int 值得函数
ToLongBiFunction<T, U> T long 计算 long 值得函数
ToDoubleFunction<T> T double 计算 double 值得函数
IntFunction<R> int R 参数为 int 类型的函数
LongFunction<R> long R 参数为 long 类型的函数
DoubleFunction<R> double R 参数为 double 类型的函数
本文首发于凌风博客:Java 8 新特性之函数式接口
作者:凌风

脚本宝典总结

以上是脚本宝典为你收集整理的Java 8 新特性之函数式接口全部内容,希望文章能够帮你解决Java 8 新特性之函数式接口所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。