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

2022-11-09 01:33:30 +08:00
 yurong3333333333
2475 次点击
所在节点    程序员
9 条回复
maowu
2022-11-09 01:49:52 +08:00
你说的是 Java8 吗?
yurong3333333333
2022-11-09 01:55:12 +08:00
@maowu 对。一般只知道有这么个 stream 可以用,但搜索 stream 的设计思想,却搜不到什么干货。
xiaofan2
2022-11-09 02:04:58 +08:00
为什么不可以啊 你用 stream 不能遍历 map 和 set 吗
SeaTac
2022-11-09 03:00:59 +08:00
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
2022-11-09 03:45:07 +08:00
map 转一下 entry 就可以遍历了,不过有点文不对题,因为 stream 本身代表的是管道思想,map 的结构是 kv ,list 的结构通常意义上是非固定数量元素,所以 list to map 可以直接用
dqzcwxb
2022-11-09 09:22:15 +08:00
aguesuka
2022-11-09 09:26:02 +08:00
set.stream() 可以直接调用,map 可以用 map.entrySet().stream();
map 不是 collection 的原因参见 Java Collections API Design FAQ.
设计思想就是 map-reduce, 而 map-reduce 的设计思想就是 monad 那一套, 不过我更认为是 functor.
Leviathann
2022-11-09 09:55:45 +08:00
就是 jdk 团队懒的写工具方法
像 kotlin 都可以 asSequence
RainCats
2022-11-09 10:40:53 +08:00
map.foreach((k,v) -> sout......)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/893723

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX