在公司 Java 项目里面广泛使用 Stream 合适吗?

2018-07-24 23:34:52 +08:00
 lhx2008
熟练 stream 之后,基本上可以用 for 的地方都用 stream 了,filter map flatnap collotors 真的非常方便,常常会写一个函数七八个 stream 操作叠上去。

但是也有一些问题
1. 操作比较简单的时候性能稍差,毕竟还要封装流水线。
2. 随着 stream 操作增多,数据类型不停流转,可读性变差
3. 有些 api 比如 collotors 还是比较复杂的,可能同事看不懂你写的代码。

大家是怎么取舍的呢?不讨论公司规定 /小组协商的问题,主要是你的想法是怎么样的呢?
3181 次点击
所在节点    问与答
24 条回复
terry0314
2018-07-24 23:40:06 +08:00
适合,之前公司用 Java 7 向 leader 推荐了 Java 8 然后组内做了个简单的分享。大家都觉得还不错,能简化很多代码
WEAlex
2018-07-24 23:55:34 +08:00
@terry0314 有参考吗?谢谢。
lovedebug
2018-07-25 00:03:36 +08:00
看 effecrive java 第三版有建议,要慎用。代码少的时候可以,一多起来调试,可读性都变差。
lhx2008
2018-07-25 00:05:00 +08:00
@lovedebug 是的,调试起来也是比较麻烦,遍历的时候可能会有一些 NPE 的问题没有处理
lhx2008
2018-07-25 00:06:44 +08:00
但是写起来真的比 python 还好用
lhx2008
2018-07-25 00:13:29 +08:00
不过调试的问题 h3 可读性的问题也可以让 stream 提前消费生成中间对象再入流,拆分粒度
Cbdy
2018-07-25 07:34:13 +08:00
不要为了用而用,以代码清晰为准
limuyan44
2018-07-25 08:29:35 +08:00
怎么取舍,你爽了别人惨了。适可而止就行。
terry0314
2018-07-25 08:44:52 +08:00
@WEAlex 什么参考,示例代码吗
WEAlex
2018-07-25 09:04:26 +08:00
@terry0314 是的。我们小组每周也在进行技术分享,想参考着做一期
terry0314
2018-07-25 09:06:22 +08:00
@WEAlex 主要是 Java 8 实战这本书里的内容,我从 Stream 里面选了一些
lhx2008
2018-07-25 09:20:33 +08:00
@limuyan44 惨倒说不上吧,总还是比动态语言好读的,而且只是写法改变了,复杂度并不会转移,只是看 10 行 stream 还是看 100 行 for 的问题
sagaxu
2018-07-25 09:30:53 +08:00
我把公司 java 项目换成 kotlin 了,基本不写循环了
des
2018-07-25 09:44:00 +08:00
歪个楼,看成 Steam 了,然后一脸懵逼
qinxi
2018-07-25 09:52:29 +08:00
java8 都这么久了
不会用的人如果没有想学习的想法
那就这样淘汰他们吧
StephenDev
2018-07-25 09:57:58 +08:00
可以试试用 RxJava 啊
zhaogaz
2018-07-25 10:01:05 +08:00
最近我也在写,找点乐子学点新东西嘛,不然太无聊了。
nl101531
2018-07-25 10:08:44 +08:00
合理,不过建议看下 Stream 的源码,这样你才能了解到自己写的操作到底循环了几次,到底有没有必要组装这个 pipeline 链。
earendil1412
2018-07-25 10:20:14 +08:00
说是这么说,用 rxjava 怎么办? spring webflux 怎么办,还不是只能真香
blackboom
2018-07-25 10:54:54 +08:00
@nl101531 在理,分场景。

楼主确认性能很差,如果已经对业务造成了影响那么很明显不应该滥用。

假如是代码不够优雅,建议重新思考使用方式。

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

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

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

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

© 2021 V2EX