User::getName含义?

一、先看你天天写的代码

java

运行

css 复制代码
userList.stream()
        .map(User::getName)
        .collect(Collectors.toList());

你只需要先记住一句话:

User::getName 就是 方法引用

等价于 Lambda:

java

运行

rust 复制代码
user -> user.getName()

二、从头拆解

1. 先看 User 类

你自己写的实体类:

java

运行

arduino 复制代码
class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }
}

getName()User 对象的普通成员方法 作用:拿到这个用户的名字

2. Lambda 原始写法

map 需要的是 **Function<User, String>**意思:传入一个 User,返回一个 String。

最原始完整写法:

java

运行

sql 复制代码
.map( (User user) -> {
    return user.getName();
} )

简化 Lambda:

java

运行

c 复制代码
.map(user -> user.getName())

3. 方法引用简写:User::getName

Java 允许你直接简写:对象调用的方法,直接写成 类名::方法名

java

运行

c 复制代码
.map(User::getName)

三、到底是什么含义?(人话版)

遍历流里每一个 User 对象调用这个对象的 getName() 方法把返回的名字拿出来

完全等同于:

java

运行

ini 复制代码
for(User u : userList){
    String name = u.getName();
}

四、结合你之前所有知识点串起来(超级重要)

你前面学过的所有东西全部打通了:

  1. **Function<T,R>**有入参、有返回值User 进,String
  2. map(Function)作用就是转换、提取属性
  3. user -> user.getName() (Lambda)
  4. User::getName (方法引用,简写版)

二者100% 完全等价,没有任何区别。

五、举一反三,所有你见过的方法引用全部归类

我把你这几天遇到的所有 :: 全部整理好,一眼分清:

1. 对象实例方法引用(最常用,90% 开发都用这个)

格式:类名::成员方法

java

运行

arduino 复制代码
User::getName       // user -> user.getName()
User::getAge        // user -> user.getAge()
String::toUpperCase // s -> s.toUpperCase()

2. 静态方法引用

格式:类名::静态方法

java

运行

arduino 复制代码
Integer::sum        // (a,b)->Integer.sum(a,b)
Integer::max        // (a,b)->Integer.max(a,b)
Integer::intValue    // x -> x.intValue()

3. 构造方法引用

java

运行

sql 复制代码
User::new            // () -> new User()

4. 普通对象方法引用

java

运行

arduino 复制代码
System.out::println  // s -> System.out.println(s)

六、全部对比,你所有疑问一次性清零

我把你所有问过的代码全部放一起对比,你瞬间融会贯通:

  1. Consumer

java

运行

arduino 复制代码
.forEach(System.out::println)
// 等价 s -> System.out.println(s)
  1. Function(提取属性,你现在这个)

java

运行

c 复制代码
.map(User::getName)
// 等价 user -> user.getName()
  1. Function(拆箱)

java

运行

less 复制代码
.mapToInt(Integer::intValue)
// 等价 x -> x.intValue()
  1. BinaryOperator(reduce 运算)

java

运行

less 复制代码
.reduce(Integer::sum)
// 等价 (a,b) -> Integer.sum(a,b)

.reduce(Integer::max)
// 等价 (a,b) -> Integer.max(a,b)

七、终极一句话总结

User::getName

遍历每一个 User 对象,调用它的 getName (),提取出用户名

相关推荐
小白说大模型7 分钟前
AI Agent 调试实战:链路追踪、Prompt 可视化与异常定位的系统方法
java·人工智能·python·算法·prompt
静水楼台x8 分钟前
spring security
java·数据库·spring
重生之我是Java开发战士9 分钟前
【Java EE】Spring Boot配置文件
java·spring boot·java-ee
Tim_1010 分钟前
【C++】019、内存泄漏
java·开发语言
咖啡八杯32 分钟前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
要开心吖ZSH3 小时前
一文搞懂:JDK 21 虚拟线程 vs N种异步方案,到底该怎么选?
java·数据库·jdk·虚拟线程
guodingdingh7 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯9 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育9 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵10 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents