资讯专栏INFORMATION COLUMN

Java 8 新特性之函数式接口

xiaotianyi / 489人阅读

摘要:返回结果的类型实例产生指定个数的随机整数,并放入到集合中函数型接口有一个参数和一个返回值的函数表示接受一个参数并生成结果返回的函数。

1. 概述 1.1 简介

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

2. 内置函数接口 2.1 Consumer 消费型接口

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

/**
 * 表示接受单个输入参数且不返回结果的操作。
 *
 * @param  输入到操作的类型
 */
@FunctionalInterface
public interface Consumer {

    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 consumer) {
    consumer.accept(m);
}
2.2 Supplier 供给型接口

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

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

    T get();
}
1. 实例

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

@Test
public void t2(){
    List list = getRandomNumList(10,() -> (int)(Math.random() * 100));
    System.out.println(list.toString());
}

public List getRandomNumList(Integer limit, Supplier supplier) {
    List list = new ArrayList<>();
    for (int i = 0 ; i < limit ; i++){
        list.add(supplier.get());
    }
    return list;
}
2.3 Function 函数型接口

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

/**
 * 表示接受一个参数并生成结果返回的函数。
 *
 * @param  函数的输入类型
 * @param  函数的返回类型
 */
@FunctionalInterface
public interface Function {

    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 func) {
    return func.apply(str);
}
2.4 Predicate 断言型接口
/**
 * 布尔值函数。
 *
 * @param  被判断对象的类型
 */
@FunctionalInterface
public interface Predicate {

    boolean test(T t);
}
1. 实例

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

@Test
public void t4() {
    List initList = Arrays.asList(3,2,45,32,1,30,10,49,48,6,7,0,8);
    List list = filterNum(initList,(x) -> x > 10);
    System.out.println("list : " + list.toString());
}

/**
 * 过滤满足条件的整数并返回
 *
 * @param list
 * @param predicate
 * @return
 */
public List filterNum(List list, Predicate predicate) {
    List 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 类型的结果,包含方法为 R apply(T t,U u)
UnaryOperator (Function 子接口) T T 对类型为 T 的对象进行一元运算,并返回 T 类型的结果,包含方法为 T apply(T t)
BinaryOperator (BiFunction 子接口) T, T T 对类型为 T 的对象进行二元运算,并返回 T 类型的结果,包含方法为 T apply(T t1, T t2)
BiConsumer T, U void 对类型为 T, U 应用操作,包含方法为 void accept(T t, U u)
ToIntFunction T int 计算 int 值得函数
ToLongBiFunction T long 计算 long 值得函数
ToDoubleFunction T double 计算 double 值得函数
IntFunction int R 参数为 int 类型的函数
LongFunction long R 参数为 long 类型的函数
DoubleFunction double R 参数为 double 类型的函数
本文首发于凌风博客:Java 8 新特性之函数式接口
作者:凌风

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72742.html

相关文章

  • Java 8 特性Lambda表达

    摘要:概述简介是一个匿名函数,我们可以把表达式理解为是一段可以传递的代码将代码像数据一样进行传递。作为一种更紧凑的代码风格,使的语言表达能力得到了提升。任何满足单一抽象方法法则的接口,都会被自动视为函数接口。 1. 概述 1.1 简介 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更...

    Ververica 评论0 收藏0
  • Java8 lambda 表达、方法引用、函数接口、默认方、静态方法

    摘要:欧阳思海继承接口后,又加了新的抽象方法,这个接口就不再是函数式接口默认方法在接口中添加了一个默认方法。总结在这篇文章中,我们讲了表达式方法引用函数式接口接口中的静态方法接口中的默认方法的使用。 今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的...

    isLishude 评论0 收藏0
  • 乐字节-Java8特性函数接口

    摘要:上一篇小乐带大家学过新特性表达式,什么时候可以使用通常表达式是用在函数式接口上使用的。使用实现创建产生一个工厂对象以上就是小乐带给大家的新特性之函数式接口,下一篇将会为大家带来新特性之方法引用,敬请关注。 上一篇小乐带大家学过 Java8新特性-Lambda表达式,什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的。从Java8开始引入了函数式接口,其说明比较...

    lakeside 评论0 收藏0
  • 乐字节-Java8核心特性实战函数接口

    摘要:大家好,上一篇小乐给大家讲述了乐字节核心特性表达式,点击回顾。接下来继续核心特性之函数式接口。感谢大家欣赏小乐带来的核心特性之函数式接口,接下来还会更多核心技术讲解,请关注乐字节如需要视频课程,请搜索乐字节腾讯课堂 大家好,上一篇小乐给大家讲述了《乐字节-Java8核心特性-Lambda表达式》,点击回顾。接下来继续:Java8核心特性之函数式接口。 什么时候可以使用Lambda?通常...

    niceforbear 评论0 收藏0
  • 深入浅出 Java 8 Lambda 表达

    摘要:在支持一类函数的语言中,表达式的类型将是函数。匿名函数的返回类型与该主体表达式一致如果表达式的主体包含一条以上语句,则表达式必须包含在花括号中形成代码块。注意,使用表达式的方法不止一种。 摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等。本文系 OneAPM 工程师编译整理。 Java 是一流的面向对象语言,除了部分简...

    wdzgege 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<