V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lhx2008
V2EX  ›  问与答

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

  •  
  •   lhx2008 · 2018-07-24 23:34:52 +08:00 via Android · 3284 次点击
    这是一个创建于 2349 天前的主题,其中的信息可能已经有所发展或是发生改变。
    熟练 stream 之后,基本上可以用 for 的地方都用 stream 了,filter map flatnap collotors 真的非常方便,常常会写一个函数七八个 stream 操作叠上去。

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

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

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

    假如是代码不够优雅,建议重新思考使用方式。
    micean
        21
    micean  
       2018-07-25 11:14:52 +08:00
    一旦接受了 rx 的方式,stream 比 rx 可读性好多了
    就是不怎么好调试……
    6IbA2bj5ip3tK49j
        22
    6IbA2bj5ip3tK49j  
       2018-07-25 11:22:16 +08:00
    这还有啥不合适的,
    业务代码还真谈性能啊?
    z3jjlzt
        23
    z3jjlzt  
       2018-07-25 11:36:07 +08:00
    有个叫 streamdebugger 的东西 调试还是挺好用的。
    lhx2008
        24
    lhx2008  
    OP
       2018-07-25 12:50:28 +08:00 via Android
    @z3jjlzt idea 那个只能跟一下,里面报错了就啥都不显示了,而且要预加载
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:15 · PVG 14:15 · LAX 22:15 · JFK 01:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.