• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX  ›  程序员

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

  •  
  •   NoKey · Jun 21, 2022 · 1653 views
    This topic created in 1446 days ago, the information mentioned may be changed or developed.
    一个 List<Obj>

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

    使用 stream

    转 Map<String,OBJ>

    请教一下各位大佬

    怎么写,比较简洁

    谢谢。
    10 replies    2022-06-22 10:43:30 +08:00
    lllllliiii
        1
    lllllliiii  
       Jun 21, 2022
    list 里面能放 List<Long,Obj>
    Leviathann
        2
    Leviathann  
       Jun 21, 2022
    为什么 list 的泛型参数有两个
    NoKey
        3
    NoKey  
    OP
       Jun 21, 2022
    @fzdwx 感谢,写的太快,脑子晕了,已经修改了
    NoKey
        4
    NoKey  
    OP
       Jun 21, 2022
    @Leviathann 谢谢,已经修改了,写错了
    NoKey
        5
    NoKey  
    OP
       Jun 21, 2022
    请教大家一下,实际上,使用的时候,可以就用 Map<Long,Obj>,在查找 key 的时候,把输入的 String 转为 Long 就可以了,但是我很好奇,搜了很多资料,没有找到如何在 Collectors.toMap() 里面去转类型,不用 Collectors.toMap() 的话,写出来感觉很丑
    wolfie
        6
    wolfie  
       Jun 21, 2022
    Collectors.toMap(e -> String.valueOf(e.getId()), Function.identity())
    Leviathann
        7
    Leviathann  
       Jun 21, 2022

    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
       Jun 21, 2022
    @wolfie 哈,谢谢,我一开始写了 e -> String.valueOf(e.getId()) 后,idea 报错,我以为不能用😪,结果写完就不报错了
    NoKey
        9
    NoKey  
    OP
       Jun 21, 2022
    @Leviathann 谢谢
    lazyfighter
        10
    lazyfighter  
       Jun 22, 2022
    其实 StreamEx 用起来更方便, 只是感觉没有那么流行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2874 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:09 · PVG 16:09 · LAX 01:09 · JFK 04:09
    ♥ Do have faith in what you're doing.