JDK8新特性之方法引用-案例实操

简介: JDK8新特性之方法引用-案例实操

一.JDK8新特性之方法引用-案例实操

之前我们学习了Stream流以及Lambda表达式相关的内容,如果想看的同学可以看一下之前的文章,接下来我们就来学习让Lambda表达式更加简洁的方法引用

image.png

二. 什么是方法引用?为什么要使用方法引用?

2.1 lambda表达式冗余

  • 案例描述:求解数组中元素的和
  • 存在的问题:lambda表达式中逻辑过于复杂
  • 改进方法:通过方法引用降低冗余,提升效率
import java.util.function.Consumer;

/**
 * 案例描述:求解数组中元素的和
 * 存在的问题:lambda表达式中逻辑过于复杂
 * 改进方法:通过方法引用降低冗余,提升效率
 */
public class Demo{
   
   

    public static void main(String[] args) {
   
   
        sum(a->{
   
   
            int sum = 0;
            for (int i : a) {
   
   
                sum += i;
            }
            System.out.println("数组之和:" + sum);
        });
    }

    public static void sum(Consumer<int[]> consumer){
   
   
        int[] a= {
   
   1,1,1,1,1,1};
        consumer.accept(a);
    }
}

2.2 方法引用解决

符号表示:::

符号说明:双冒号为方法引用运算符,而它所在的表达式被称为方法引用

:: 方法引用解决

import java.util.function.Consumer;

/**
 * 案例描述:求解数组中元素的和
 * 存在的问题:lambda表达式中逻辑过于复杂
 * 改进方法:通过方法引用降低冗余,提升效率
 */
public class Demo{
   
   

    public static void main(String[] args) {
   
   
        sum(FunctionRefTest01::method);
    }

    public static int method(int[] arr){
   
   
        int sum = 0;
        for (int i : arr) {
   
   
            sum += i;
        }
        System.out.println("数组之和:" + sum);
        return sum;
    }

    public static void sum(Consumer<int[]> consumer){
   
   
        int[] a= {
   
   1,1,1,1,1,1};
        consumer.accept(a);
    }
}

三.方法引用基本方式

方法引用在JDK8中使用是相当灵活的,有以下几种形式:

  1. instanceName::methodName->对象::方法名

  2. ClassName::staticMethodName-> 类名::静态方法

  3. ClassName::methodName->类名::普通方法

  4. ClassName::new->类名::new 调用的构造器

  5. 数组类型[]::new->String[]::new 调用数组的构造器

四.总结

方法引用是为了简化lambda中存在太多冗余或者重复的代码,更加简洁,方便使用。

相关文章
|
1月前
|
Oracle Java 关系型数据库
CentOS 7.6操作系统部署JDK实战案例
这篇文章介绍了在CentOS 7.6操作系统上通过多种方式部署JDK的详细步骤,包括使用yum安装openjdk、基于rpm包和二进制包安装Oracle JDK,并提供了配置环境变量的方法。
230 80
|
8天前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
14 1
|
27天前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
35 3
|
13天前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
15 0
|
1月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
2月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
73 3
|
2月前
|
Java
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
|
2月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
2月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
1月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
11 0