Java 项目该不该用 stream 流来编写代码?考虑 code viewer
source link: https://www.v2ex.com/t/843929
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
vate32 1 天前 2
golangLover 1 天前 via Android
LeonL1 1 天前
chendy 1 天前
有的地方直接循环更清晰,有些地方 stream 更简洁
fengpan567 1 天前
xianzhe 1 天前 via Android
lostpg 1 天前 via Android 1
SurfaceView 1 天前
xuanbg 1 天前
keshawnvan 1 天前
eb0c6551 1 天前 3
kingfalse 1 天前 via Android
kingfalse 1 天前 via Android 1
pengtdyd 1 天前 8
Samuelcc 1 天前
只会不合理使用的人换别的写法可读性也不会高到哪里去。。
w741069229 1 天前 via iPhone
luckyrayyy 1 天前
MakHoCheung 1 天前
TWorldIsNButThis 1 天前 via iPhone
gabon 1 天前
TWorldIsNButThis 1 天前 via iPhone
adoal 1 天前 via iPhone
chnyuwen 1 天前
gam2046 1 天前
w741069229 1 天前
pofycn 1 天前
zmal 1 天前
1. 可读性差。理论上 lambda 范式的代码可读性会更好。如果可读性变差了,说明姿势不太对,业务逻辑和控制逻辑没有分离。
2. 性能损耗。据说相比 for loop 大约 15%的性能损失。但对业务代码来说是可接受的。
3. 不便调试。这个要看具体案例,个人认为不是问题。
4. 老派守旧。无解,建议换公司。
searene 1 天前
Vegetable 1 天前
Stream 确实不错,但是最好少用 lambda ,把代码写短不是本事,写清楚才是。
Vegetable 1 天前 1
tohuer00 1 天前
EscYezi 1 天前 via iPhone 3
顺便推荐 vavr 库,更简洁更清晰
v2eb 1 天前 via Android
gtx990 1 天前 via Android 2
lux182 1 天前
Rocketer 1 天前 via iPhone
yazinnnn 1 天前
RobberPhex 1 天前
所以我个人觉得,单个语句中,stream 可以用一次,不能再多。
当然,回到问题,公司项目,怎么约定就怎么来,协作重要。
Jooooooooo 1 天前 1
WebKit 1 天前 via Android
Hider5 1 天前 via iPhone
w741069229 20 小时 28 分钟前 via iPhone
wxyrrcj 19 小时 48 分钟前 via Android
dreamramon 19 小时 31 分钟前 1
aptupdate 19 小时 17 分钟前 via iPhone
所以这种省时省力的方法为什么不用呢? NPE 问题确实麻烦,不过新版 idea 里有个流调试器,直接可视化处理过程。
micean 18 小时 47 分钟前
cweijan 18 小时 33 分钟前
neptuno 18 小时 7 分钟前
ychost 17 小时 52 分钟前
arthas2234 17 小时 27 分钟前
nothingistrue 17 小时 25 分钟前
不过 Lambda 表达式能无缝转接,Stream 不能。Stream 使用的是数据流逻辑,跟传统的“判断、循环……”逻辑有区别,转换过去需要学习。但是这个学习成本不大,而且如果是数据结构 /算法已经很溜的,早就回了压根不用学。大佬刚开始不让用,可能还是要考虑团队管理,大佬要是一直不让用,那他 100%是假大佬。
Huelse 17 小时 18 分钟前
yor1g 17 小时 11 分钟前
superchijinpeng 17 小时 9 分钟前
Loku 17 小时 5 分钟前
loryyang 17 小时 4 分钟前 1
我对代码的认知就是,这代码写完,过段时间,你自己能不能很快地看懂,看不懂就说明写得不好。要不改逻辑,要不写注释
最后,stream 也有上面提到的堆栈问题,一般不建议做非常复杂的操作
xwayway 17 小时 2 分钟前
bertonzh 16 小时 53 分钟前
byte10 16 小时 53 分钟前
intmax2147483647 16 小时 51 分钟前
dayudayupao 16 小时 45 分钟前
Magentaize 16 小时 32 分钟前 via iPhone 2
anzu 16 小时 23 分钟前
clf 16 小时 23 分钟前
nulIptr 15 小时 57 分钟前 3
fewok 15 小时 33 分钟前
WispZhan 14 小时 55 分钟前 via Android
selca 14 小时 28 分钟前
uSy62nMkdH 14 小时 14 分钟前
mauve 13 小时 34 分钟前
zw1one 13 小时 28 分钟前
siweipancc 13 小时 19 分钟前 via iPhone
NoKey 13 小时 0 分钟前
学 java 的同时,学习一下其他语言
各种语言提供的语法糖不同
如楼上有人说的,如果没有 stream ,各种分组,过滤,排序就不会写了
这实际上是有问题的
当然,要觉得自己这辈子在程序员这路上,只用 java ,且都在 1.8 版本以上,那也没啥问题
TWorldIsNButThis 12 小时 47 分钟前 via iPhone
Java 官方视频拿 java17 的 stream 跟它对比,说难道更好的抽象(指 eclipse collections )一定会有更差的性能吗?结论为不是,因为 eclipse collections 在他们给出的几个用例下抽象更好且速度也更快 XD
Leviathann 12 小时 31 分钟前
HanMeiM 12 小时 6 分钟前
uleh 11 小时 9 分钟前
但是如果是工程化比较弱的团队,请记住:安全第一! 😄
wupher 9 小时 53 分钟前
ReactiveX 倒是可以考虑场景,值得商榷。
FrankHB 8 小时 31 分钟前
提到的一些通病比这里说的原始问题更有毛病得多。
栈作为活动记录的一种实现,本来就用于隐藏过程运行时状态的实现细节。只有直接能在程序中显式访问活动记录的语言(比如至少得有 first-class one-shot continuation ),这种东西才配被要求是和程序员交互的标配。
说白了,在抽象能力弱鸡的语言里没事依赖栈帧是一种习惯性纵容实现泄露抽象的病。
特别是要知道 Java 不光不支持 continuation capture ,甚至连 proper tail call 都没有……设计 JVM 的丈育还用 stack inspection 当挡箭牌,结果差不多被正面打脸: https://stackoverflow.com/a/5097402
退一步讲,真是想要照顾调试体验,又不是 C 这种滥依赖 ABI 兼容的历史包袱,这么多年了连个 shadow stack 都不会实现的弟弟怎么好意思变成工业主流的?
算了,还是先停止把 stack 叫做什么劳什子“堆栈”开始吧。
(反思为什么 NPE PTSD 以及 optional 实质套娃的问题就不提了,本质算不上 Java 特色,虽然这年头也快成了 Java 特供问题了。)
hervey424840 6 小时 22 分钟前
lmshl 6 小时 7 分钟前
ZStream / fs2 混着用表示看 Stream API 毫无压力😏
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK