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

User::getName — 方法引用

介绍

List<String>names=users.stream().map(User::getName)// Function<User, String>.collect(Collectors.toList());User::getName是什么意思

意思很明白返回

但User::getName 为什么这样写?
User::getName 是 Java 8 引入的方法引用语法,它是 Lambda 表达式的简写形式。
等价于

(Useruser)->user.getName()

因为 Stream.map() 需要一个 Function<User, String> 类型的参数:

<R>Stream<R>map(Function<?superT,?extendsR>mapper)

所以编译器会自动把 User::getName 转换成对应的 Function

List<User>users=...;// 写法一:方法引用(最简洁)List<String>names1=users.stream().map(User::getName).collect(Collectors.toList());// 写法二:Lambda 表达式List<String>names2=users.stream().map(user->user.getName()).collect(Collectors.toList());// 写法三:匿名内部类(最啰嗦)List<String>names3=users.stream().map(newFunction<User,String>(){@OverridepublicStringapply(Useruser){returnuser.getName();}}).collect(Collectors.toList());

三种写法效果完全一样,推荐用写法一(方法引用)

方法引用的四种形式

形式语法示例等价 Lambda
静态方法引用类名::静态方法Integer::parseInts -> Integer.parseInt(s)
实例方法引用对象::实例方法str::length() -> str.length()
任意对象的实例方法类名::实例方法String::lengthstr -> str.length()
构造方法引用类名::newUser::new() -> new User()

其他例子

// 静态方法引用List<String>strList=Arrays.asList("1","2","3");List<Integer>intList=strList.stream().map(Integer::parseInt)// 等价于 s -> Integer.parseInt(s).collect(Collectors.toList());// 构造方法引用List<User>users=names.stream().map(User::new)// 等价于 name -> new User(name).collect(Collectors.toList());// 任意对象的实例方法List<String>words=Arrays.asList("hello","world");List<Integer>lengths=words.stream().map(String::length)// 等价于 s -> s.length().collect(Collectors.toList());

User::getName 就是 “调用每个 User 对象的 getName() 方法” 的简写,本质是一个 Function<User, String>。它是 Java 8 方法引用语法,比 Lambda 更简洁、可读性更强。

http://www.jsqmd.com/news/1154511/

相关文章:

  • 如何快速完成插件安装:BetterNCM-Installer完整操作手册
  • 【USB 传视音频的那些事01】为什么你的 USB 摄像头不用装驱动?
  • 187、并发踩坑合集:竞态条件、死锁、活锁、aiohttp 连接泄漏与调试工具
  • 工业负载控制方案:TPD2017FN与PIC18F4610应用解析
  • 嵌入式音频开发:MKV42F256VLH16与CMT-8540S-SMT硬件选型与优化
  • 基于PAM8124与STM32的D类音频放大方案设计
  • 给 WorkBuddy 接入AI 音乐 MCP,让 Agent 真正生成音乐 demo
  • MAX77654与PIC18F87K22构建高效电源管理系统
  • 科普长文:四大真实案例拆解,GF 聚合物管路技术如何适配不同场景的数据中心液冷方案
  • Claude Code 前后端联调实战:让 Claude 帮你打通 REST API
  • TLA2518与TM4C123GH6PZL的ADC系统设计与优化
  • 巨有科技:市集品牌联名周边开发 延伸盈利与传播边界
  • 终极无损视频剪辑指南:如何用LosslessCut极速处理视频音频文件
  • 北光恒电实操总结泰克MSO46示波器遇到故障该怎么办
  • 让 Claude Code 学会走命令行这条近路
  • WeChatIntercept终极指南:3分钟掌握微信防撤回完整方案
  • 工业负载控制方案:TPD2017FN与PIC32MZ的智能驱动设计
  • WeChatIntercept终极配置指南:3分钟实现Mac微信防撤回
  • 蓝牙5.4无线音频系统设计与LC3编解码优化
  • 番茄小说下载神器:如何一键获取全网小说资源并智能转换格式
  • 抖音音乐原声批量下载终极指南:免费开源工具快速提取背景音乐
  • 鸿蒙智能体开发实战:11.自定义插件
  • SD-PPP:在Photoshop中无缝集成AI绘图的全新工作流革命
  • 逃离塔科夫离线版存档编辑神器:SPT-AKI Profile Editor完全指南
  • 直流有刷电机驱动方案:TC78H653FTG与GD32VF103VBT6组合应用
  • STM32与TB6593FNG直流电机控制优化方案
  • 生图提示词不会写?教你用大语言模型改写需求的选型攻略
  • 【Bug已解决】CC Switch configuration conflict / Multiple API keys mixed — Claude Code 多配置冲突解决方案
  • cursor无法连接centos7,显示node版本太低
  • 如何为你的音乐应用添加Apple Music级别的歌词体验?