lhx2008
V2EX  ›  问与答

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

  •  
  •   lhx2008 · Jul 24, 2018 via Android · 3924 views
    This topic created in 3032 days ago, the information mentioned may be changed or developed.
    熟练 stream 之后,基本上可以用 for 的地方都用 stream 了,filter map flatnap collotors 真的非常方便,常常会写一个函数七八个 stream 操作叠上去。

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

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

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

    假如是代码不够优雅,建议重新思考使用方式。
    micean
    micean
    Jul 25, 2018
    21
    一旦接受了 rx 的方式,stream 比 rx 可读性好多了
    就是不怎么好调试……
    6IbA2bj5ip3tK49j
    6IbA2bj5ip3tK49j
    Jul 25, 2018
    22
    这还有啥不合适的,
    业务代码还真谈性能啊?
    z3jjlzt
    z3jjlzt
    Jul 25, 2018
    23
    有个叫 streamdebugger 的东西 调试还是挺好用的。
    lhx2008
    lhx2008
    OP
    Jul 25, 2018 via Android
    24
    @z3jjlzt idea 那个只能跟一下,里面报错了就啥都不显示了,而且要预加载
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2177 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    ♥ Do have faith in what you're doing.