当前位置: 首页 > news >正文

java 方法引用与构造器引用

Java 方法引用和构造器引用是 Java 8 引入的重要特性,它们进一步简化了 Lambda 表达式的书写,使得代码更加简洁和易读。下面详细介绍方法引用和构造器引用的概念、用法及示例。

方法引用

方法引用是一种简化 Lambda 表达式的语法糖,它允许通过类名或对象引用直接引用已有方法。方法引用可以替代某些 Lambda 表达式,使得代码更简洁。

语法

方法引用的语法格式如下:

  • 引用类的方法ClassName::methodName
  • 引用对象的方法objectReference::methodName
  • 引用实例方法instanceReference::methodName
  • 引用构造器ClassName::new

示例

示例 1:引用类的方法

假设有一个 MathUtil 类,其中包含一个静态方法 square

public class MathUtil {public static int square(int x) {return x * x;}
}

使用 Lambda 表达式和方法引用:

import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 使用 Lambda 表达式numbers.stream().map(x -> MathUtil.square(x)).forEach(System.out::println);// 使用方法引用numbers.stream().map(MathUtil::square).forEach(System.out::println);}
}
示例 2:引用对象的方法

假设有一个 Calculator 类,其中包含一个实例方法 add

public class Calculator {public int add(int a, int b) {return a + b;}
}

使用 Lambda 表达式和方法引用:

import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {Calculator calculator = new Calculator();List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 使用 Lambda 表达式numbers.stream().map(x -> calculator.add(x, 10)).forEach(System.out::println);// 使用方法引用numbers.stream().map(x -> calculator::add).forEach(System.out::println);}
}
示例 3:引用实例方法

假设有一个 StringUtil 类,其中包含一个实例方法 reverse

public class StringUtil {public String reverse(String str) {return new StringBuilder(str).reverse().toString();}
}

使用 Lambda 表达式和方法引用:

import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {List<String> strings = Arrays.asList("hello", "world", "java");// 使用 Lambda 表达式strings.stream().map(str -> new StringUtil().reverse(str)).forEach(System.out::println);// 使用方法引用strings.stream().map(StringUtil::reverse).forEach(System.out::println);}
}

构造器引用

构造器引用是另一种方法引用的形式,用于创建对象的构造器。构造器引用的语法格式如下:

  • 引用构造器ClassName::new

示例

示例 1:引用构造器

假设有一个 Person 类,其中包含一个构造器:

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}

使用 Lambda 表达式和构造器引用:

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;public class ConstructorReferenceExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie");List<Integer> ages = Arrays.asList(25, 30, 35);// 使用 Lambda 表达式List<Person> people = new ArrayList<>();for (int i = 0; i < names.size(); i++) {people.add(new Person(names.get(i), ages.get(i)));}// 使用构造器引用List<Person> people2 = IntStream.range(0, names.size()).mapToObj(i -> new Person(names.get(i), ages.get(i))).collect(Collectors.toList());// 使用 SupplierSupplier<Person> supplier = Person::new;Person person = supplier.get();}
}

方法引用的常见应用场景

1. 遍历集合
import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 使用方法引用numbers.forEach(System.out::println);}
}
2. 字符串处理
import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {List<String> strings = Arrays.asList("hello", "world", "java");// 使用方法引用strings.stream().map(String::toUpperCase).forEach(System.out::println);}
}
3. 数学运算
import java.util.Arrays;
import java.util.List;public class MethodReferenceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 使用方法引用int sum = numbers.stream().reduce(0, Integer::sum);System.out.println(sum); // 输出 15}
}

总结

Java 方法引用和构造器引用是 Java 8 引入的重要特性,它们进一步简化了 Lambda 表达式的书写,使得代码更加简洁和易读。

  • 方法引用:用于引用已有方法,可以替代某些 Lambda 表达式,使得代码更简洁。

    • 引用类的方法ClassName::methodName
    • 引用对象的方法objectReference::methodName
    • 引用实例方法instanceReference::methodName
  • 构造器引用:用于引用构造器,简化对象创建。

    • 引用构造器ClassName::new

通过使用方法引用和构造器引用,可以显著减少代码量,提高代码的可读性和可维护性。掌握这些特性后,可以更好地利用它们来编写高效、简洁的 Java 应用程序。

http://www.lryc.cn/news/457175.html

相关文章:

  • python3的语法
  • Spring Data JPA中的锁机制
  • mybatis分页拦截器
  • React学习过程(持续更新......)
  • pve lxc容器探索,陆续完善中
  • 5款人声分离免费软件分享,从入门到精通,伴奏提取分分钟拿捏!
  • 镭速助力解决企业大文件传输难题
  • SpringBootWeb AOP
  • 傅里叶分析之掐死教程(完整版)更新于2014.06.06
  • macOS终端配置自动补全功能
  • 华为---MUX VLAN简介及示例配置
  • docker详解介绍+基础操作 (四)容器镜像
  • PostgreSQL数据库定期清理归档(pg_wal)日志
  • RTTI介绍
  • 【C#生态园】C#推送通知库大比拼:选择最适合你项目的库
  • 乐歌E5,E6系列升降桌质量如何?2024推荐必买的四款热销型号
  • Android广播
  • Chapter 2 - 3. Understanding Congestion in Fibre Channel Fabrics
  • 014 属性分组
  • ElasticSearch备考 -- Alias
  • 使用AI编码,这些安全风险你真的了解吗?
  • 计算机网络实验一:组建对等网络
  • R语言绘制折线图
  • 基于组合模型的公交交通客流预测研究
  • docker环境redis启动失败
  • Pandas库详细学习要点
  • 光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的社区家政服务预约系统设计与实现【包运行成功】
  • 2024最新【Pycharm】史上最全PyCharm安装教程,图文教程(超详细)
  • llama3 implemented from scratch 笔记