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

为什么 List 可以转成 Stream 而 map 和 set 不能转成 Stream?

  •  
  •   yurong3333333333 · 2022-11-09 01:33:30 +08:00 · 2660 次点击
    这是一个创建于 753 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2022-11-09 12:57:19 +08:00
    感谢各位大佬指点
    第 2 条附言  ·  2022-11-09 13:04:34 +08:00
    List 和 Set 可以直接使用 stream 而 map 不能直接使用 stream

    map 可以间接使用 stream:map.entrySet().stream()
    9 条回复    2022-11-09 10:40:53 +08:00
    maowu
        1
    maowu  
       2022-11-09 01:49:52 +08:00 via Android   ❤️ 1
    你说的是 Java8 吗?
    yurong3333333333
        2
    yurong3333333333  
    OP
       2022-11-09 01:55:12 +08:00
    @maowu 对。一般只知道有这么个 stream 可以用,但搜索 stream 的设计思想,却搜不到什么干货。
    xiaofan2
        3
    xiaofan2  
       2022-11-09 02:04:58 +08:00   ❤️ 1
    为什么不可以啊 你用 stream 不能遍历 map 和 set 吗
    SeaTac
        4
    SeaTac  
       2022-11-09 03:00:59 +08:00   ❤️ 1
    1. 生成 stream 用到的是 Collection.stream()
    2. Map 不可以,因为 Map 不是 Collection: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
    3. Set 可以,因为 Set 是 Collection

    https://stackoverflow.com/questions/39950576/why-streams-cannot-be-created-for-map-in-java8
    night98
        5
    night98  
       2022-11-09 03:45:07 +08:00   ❤️ 1
    map 转一下 entry 就可以遍历了,不过有点文不对题,因为 stream 本身代表的是管道思想,map 的结构是 kv ,list 的结构通常意义上是非固定数量元素,所以 list to map 可以直接用
    dqzcwxb
        6
    dqzcwxb  
       2022-11-09 09:22:15 +08:00   ❤️ 1
    aguesuka
        7
    aguesuka  
       2022-11-09 09:26:02 +08:00   ❤️ 1
    set.stream() 可以直接调用,map 可以用 map.entrySet().stream();
    map 不是 collection 的原因参见 Java Collections API Design FAQ.
    设计思想就是 map-reduce, 而 map-reduce 的设计思想就是 monad 那一套, 不过我更认为是 functor.
    Leviathann
        8
    Leviathann  
       2022-11-09 09:55:45 +08:00   ❤️ 1
    就是 jdk 团队懒的写工具方法
    像 kotlin 都可以 asSequence
    RainCats
        9
    RainCats  
       2022-11-09 10:40:53 +08:00   ❤️ 1
    map.foreach((k,v) -> sout......)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:27 · PVG 17:27 · LAX 01:27 · JFK 04:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.