Java , list 用 stream 转 map,如何简洁的转 key 的类型

2022-06-21 19:39:38 +08:00
 NoKey
一个 List<Obj>

Obj 有个字段 ID 是 long 型,现在要以 id 作为 key 转为 map ,但是转了之后,需要这个 id 变成 String 型

使用 stream

转 Map<String,OBJ>

请教一下各位大佬

怎么写,比较简洁

谢谢。
1296 次点击
所在节点    程序员
10 条回复
fzdwx
2022-06-21 19:40:59 +08:00
list 里面能放 List<Long,Obj>
Leviathann
2022-06-21 19:43:23 +08:00
为什么 list 的泛型参数有两个
NoKey
2022-06-21 19:43:32 +08:00
@fzdwx 感谢,写的太快,脑子晕了,已经修改了
NoKey
2022-06-21 19:43:48 +08:00
@Leviathann 谢谢,已经修改了,写错了
NoKey
2022-06-21 19:46:15 +08:00
请教大家一下,实际上,使用的时候,可以就用 Map<Long,Obj>,在查找 key 的时候,把输入的 String 转为 Long 就可以了,但是我很好奇,搜了很多资料,没有找到如何在 Collectors.toMap() 里面去转类型,不用 Collectors.toMap() 的话,写出来感觉很丑
wolfie
2022-06-21 19:52:37 +08:00
Collectors.toMap(e -> String.valueOf(e.getId()), Function.identity())
Leviathann
2022-06-21 19:53:36 +08:00

objs.stream()
.collect(Collectors.toMap((Function<Obj, Long>) Obj::id ).andThen(Long::toString), Function.identity()))
或者直接
objs.stream()
.collect((obj) -> obj.getId().toString(), Function.identity()))
或者 get 的地方在判断一下 null/用 optional
NoKey
2022-06-21 19:56:04 +08:00
@wolfie 哈,谢谢,我一开始写了 e -> String.valueOf(e.getId()) 后,idea 报错,我以为不能用😪,结果写完就不报错了
NoKey
2022-06-21 19:57:22 +08:00
@Leviathann 谢谢
lazyfighter
2022-06-22 10:43:30 +08:00
其实 StreamEx 用起来更方便, 只是感觉没有那么流行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX