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

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

  •  
  •   NoKey · Jun 21, 2022 · 1833 views
    This topic created in 1595 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
    lllllliiii
    Jun 21, 2022
    1
    list 里面能放 List<Long,Obj>
    Leviathann
    Leviathann
    Jun 21, 2022
    2
    为什么 list 的泛型参数有两个
    NoKey
    NoKey
    OP
    Jun 21, 2022
    3
    @fzdwx 感谢,写的太快,脑子晕了,已经修改了
    NoKey
    NoKey
    OP
    Jun 21, 2022
    4
    @Leviathann 谢谢,已经修改了,写错了
    NoKey
    NoKey
    OP
    Jun 21, 2022
    5
    请教大家一下,实际上,使用的时候,可以就用 Map<Long,Obj>,在查找 key 的时候,把输入的 String 转为 Long 就可以了,但是我很好奇,搜了很多资料,没有找到如何在 Collectors.toMap() 里面去转类型,不用 Collectors.toMap() 的话,写出来感觉很丑
    wolfie
    wolfie
    Jun 21, 2022
    6
    Collectors.toMap(e -> String.valueOf(e.getId()), Function.identity())
    Leviathann
    Leviathann
    Jun 21, 2022
    7
    就
    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
    NoKey
    OP
    Jun 21, 2022
    8
    @wolfie 哈,谢谢,我一开始写了 e -> String.valueOf(e.getId()) 后,idea 报错,我以为不能用😪,结果写完就不报错了
    NoKey
    NoKey
    OP
    Jun 21, 2022
    9
    @Leviathann 谢谢
    lazyfighter
    lazyfighter
    Jun 22, 2022
    10
    其实 StreamEx 用起来更方便, 只是感觉没有那么流行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5684 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:24 · PVG 10:24 · LAX 18:24 · JFK 21:24
    ♥ Do have faith in what you're doing.