List→Stream→Map→List转换的快捷方式咨询:是否有更短写法?
嘿,这个问题问到点子上了!日常写Java流式代码的时候,确实可以通过一些小技巧让这段代码更简洁,我给你整理几种实用的方案:
Java 16+ 专属简化:Stream.toList()
从Java 16开始,Stream接口新增了默认方法toList(),直接替代collect(Collectors.toList()),不用再导入Collectors类,代码一下子清爽很多:myList.stream().map(el -> el.name).toList()注意:这个方法返回的是不可变列表,如果业务场景需要可变列表,还是得用
collect(Collectors.toCollection(ArrayList::new)),但绝大多数场景下不可变列表完全够用。用方法引用进一步精简Lambda
如果你的元素类有对应的getter方法(比如getName()),可以把Lambda表达式换成方法引用,代码会更紧凑:myList.stream().map(YourElementClass::getName).toList()记得把
YourElementClass替换成你实际的元素类型哦。Java 8-15 版本的小优化
如果你还在使用Java 8到15的版本,没法用toList(),可以通过静态导入Collectors的方法来简化:
先在类顶部加静态导入:import static java.util.stream.Collectors.toList;之后代码就可以写成:
myList.stream().map(el -> el.name).collect(toList())少了
Collectors.这部分,也能省点字符。第三方库的捷径(可选)
如果你的项目里已经引入了Guava或者Apache Commons Collections这类工具库,也有更短的写法,比如Guava的Lists.transform:Lists.transform(myList, YourElementClass::getName)不过要注意:这个方法返回的是原列表的视图,不是独立的新列表,原列表的修改会同步影响这个结果列表,如果需要完全独立的列表,得套一层
new ArrayList<>(...)。
内容的提问来源于stack exchange,提问作者wutzebaer

