V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NoKey
V2EX  ›  程序员

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

  •  
  •   NoKey · 2022-06-21 19:39:38 +08:00 · 1299 次点击
    这是一个创建于 887 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个 List<Obj>

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

    使用 stream

    转 Map<String,OBJ>

    请教一下各位大佬

    怎么写,比较简洁

    谢谢。
    10 条回复    2022-06-22 10:43:30 +08:00
    fzdwx
        1
    fzdwx  
       2022-06-21 19:40:59 +08:00
    list 里面能放 List<Long,Obj>
    Leviathann
        2
    Leviathann  
       2022-06-21 19:43:23 +08:00
    为什么 list 的泛型参数有两个
    NoKey
        3
    NoKey  
    OP
       2022-06-21 19:43:32 +08:00
    @fzdwx 感谢,写的太快,脑子晕了,已经修改了
    NoKey
        4
    NoKey  
    OP
       2022-06-21 19:43:48 +08:00
    @Leviathann 谢谢,已经修改了,写错了
    NoKey
        5
    NoKey  
    OP
       2022-06-21 19:46:15 +08:00
    请教大家一下,实际上,使用的时候,可以就用 Map<Long,Obj>,在查找 key 的时候,把输入的 String 转为 Long 就可以了,但是我很好奇,搜了很多资料,没有找到如何在 Collectors.toMap() 里面去转类型,不用 Collectors.toMap() 的话,写出来感觉很丑
    wolfie
        6
    wolfie  
       2022-06-21 19:52:37 +08:00
    Collectors.toMap(e -> String.valueOf(e.getId()), Function.identity())
    Leviathann
        7
    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
        8
    NoKey  
    OP
       2022-06-21 19:56:04 +08:00
    @wolfie 哈,谢谢,我一开始写了 e -> String.valueOf(e.getId()) 后,idea 报错,我以为不能用😪,结果写完就不报错了
    NoKey
        9
    NoKey  
    OP
       2022-06-21 19:57:22 +08:00
    @Leviathann 谢谢
    lazyfighter
        10
    lazyfighter  
       2022-06-22 10:43:30 +08:00
    其实 StreamEx 用起来更方便, 只是感觉没有那么流行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:36 · PVG 09:36 · LAX 17:36 · JFK 20:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.