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

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

  •  
  •   yurong3333333333 · Nov 9, 2022 · 3341 views
    This topic created in 1282 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Nov 9, 2022
    感谢各位大佬指点
    Supplement 2  ·  Nov 9, 2022
    List 和 Set 可以直接使用 stream 而 map 不能直接使用 stream

    map 可以间接使用 stream:map.entrySet().stream()
    9 replies    2022-11-09 10:40:53 +08:00
    maowu
        1
    maowu  
       Nov 9, 2022 via Android   ❤️ 1
    你说的是 Java8 吗?
    yurong3333333333
        2
    yurong3333333333  
    OP
       Nov 9, 2022
    @maowu 对。一般只知道有这么个 stream 可以用,但搜索 stream 的设计思想,却搜不到什么干货。
    xiaofan2
        3
    xiaofan2  
       Nov 9, 2022   ❤️ 1
    为什么不可以啊 你用 stream 不能遍历 map 和 set 吗
    AmericanExpress
        4
    AmericanExpress  
       Nov 9, 2022   ❤️ 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  
       Nov 9, 2022   ❤️ 1
    map 转一下 entry 就可以遍历了,不过有点文不对题,因为 stream 本身代表的是管道思想,map 的结构是 kv ,list 的结构通常意义上是非固定数量元素,所以 list to map 可以直接用
    dqzcwxb
        6
    dqzcwxb  
       Nov 9, 2022   ❤️ 1
    aguesuka
        7
    aguesuka  
       Nov 9, 2022   ❤️ 1
    set.stream() 可以直接调用,map 可以用 map.entrySet().stream();
    map 不是 collection 的原因参见 Java Collections API Design FAQ.
    设计思想就是 map-reduce, 而 map-reduce 的设计思想就是 monad 那一套, 不过我更认为是 functor.
    Leviathann
        8
    Leviathann  
       Nov 9, 2022   ❤️ 1
    就是 jdk 团队懒的写工具方法
    像 kotlin 都可以 asSequence
    RainCats
        9
    RainCats  
       Nov 9, 2022   ❤️ 1
    map.foreach((k,v) -> sout......)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5458 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 05:53 · PVG 13:53 · LAX 22:53 · JFK 01:53
    ♥ Do have faith in what you're doing.