我个人在工作中基本都是用 stream 来代替 foreach 处理数据的,代码简洁了好多。。 但是我同事基本还是用 foreach 处理的,不知道大家、周围用这个的多不多
我个人在工作中基本都是用 stream 来代替 foreach 处理数据的,代码简洁了好多。。 但是我同事基本还是用 foreach 处理的,不知道大家、周围用这个的多不多
|
1
没有 stream,我现在手里这个需求我能写成自闭症
|
|
xyooyxApr 13, 2019
2
list.forEach(x->{xxx}) 比较经常用,但是有时候需要维护一个计数 index 就不方便了,代码块里不允许可变变量
|
|
lihongjie0209Apr 13, 2019
3
map
groupBy filter anyMatch allMatch 这些你用 for 循环写出来代码难看的要死。 关键是后面你改代码的时候很舒服 |
|
4
@lqw3030
可以使用 IntStream.range(0, list.size())..... 这样的方式操作索引 |
|
5
@lihongjie0209 是的 还有个 collect,写起来很方便 hhh
|
|
loveCodingApr 13, 2019
6
用习惯了之后,简直爽的飞起啊
|
|
7
我们 code review 如果发现可以使用 stream 的地方没使用会影响绩效
|
|
CbdyApr 13, 2019 via Android
8
不仅用 stream,还用 vavr
|
|
miceanApr 13, 2019
9
看情况,stream 里只能抛 RuntimeException,包个 try catch 好难看……
|
|
miceanApr 13, 2019
10
另外也不能 return 到外层
kotlin 对此做了一些糖 |
|
11
Stream, Completablefuture, Optional 在 Java 8 是最常见的。Spring Data JPA ( JPA 2.2 )早已经支持 Stream, Optional 返回结果。
现在已经将工作环境切换到 Java11,Optional 现在支持 map, flatMap 了,var 类型推断,List.of, Map.of 等开始用了。 不过 Future,Completablefuture 用起来不舒服,没有 Reactor API 方便。 |
|
dyxLikeApr 13, 2019
12
网上说不用并行流的情况下 stream foreach 的效率比循环要低, 不知道大家是怎么看的?
|
|
rb6221Apr 13, 2019
14
foreach map filter findFirst
这几个用的最多 |
|
15
@dyxLike 你觉得机器值钱还是人值钱,而且只要你一直升级 jvm, 这些性能问题在 jvm 层面都帮你解决了。 前几年还说不能用字符串拼接呢
|
|
allanzhuoApr 13, 2019
16
刚开始用,感觉很香。
|
|
wysnylcApr 13, 2019
17
@lihongjie0209 #4 Stream.iterate(0, item -> item + 1).limit(10).forEach(
|
|
hodurApr 13, 2019
18
用得很爽,不过现在这个项目用的还是 java7
|
|
xiaweiyangApr 13, 2019 via Android
19
你同事是不想学,stream 好用的飞起,可以节省不少时间,然后好划水。
|
|
passerbytinyApr 13, 2019
20
早就想用了,不过优先级排的很靠后,应该属于 Java 8 新特性中最晚启用的,毕竟要非常大地改变编码习惯。
|
|
honeycombApr 13, 2019 via Android
21
|
|
bumzApr 13, 2019
22
@dyxLike #12 充分优化,stream 效率比 foreach 更高,因为 iterator 需要很多不必要的边界检查,这些是基于 spliterator 的 stream 不需要的。不过 stream 的效率需要 partial escape analysis 的支持,这个 graalvm 已经有了,新版 jvm 也在开始有
|
|
leon0318Apr 13, 2019 via Android
23
stream 很好用
|
|
NeinChnApr 13, 2019
24
@lihongjie0209
机器值钱,如果觉得人比机器值钱,只能说明服务规模太小了 而且稍大一点的公司,三五年都不会更新 JDK(大版本)... 不过 for 循环这个损耗确实...有点小....不是极端场景可以基本忽略.... |
|
RobberPhexApr 13, 2019
25
想用来着,但是 stream 还是有几个问题的:
1. 复杂逻辑,一套就出现了很长的缩进。“火箭式代码”,就在刚刚发现项目里出现了 stream+lamda,8 级缩进😂 2. stream+lamda 打断点,如何查看 return 的值呢?比如: ``` Collectors.toMap( info -> Optional.ofNullable(processKey(info)), info -> Optional.ofNullable(processValue(info)) ) ``` 我想每次在 map 里加一个 pair 的时候停下来,并知道刚刚 /将要添加的 pair 是啥。 --- 另外,谈谈我的理解,不对的话,请及时斧正。 stream 在简单的数据转换时很有用,比如将 List<String>转换成 List<Long> 面对复杂逻辑,就需要 stream+lamad/function 了,类似函数式。 但是函数式的缺点就在于,1. 人的理解一般是指令式的,函数式很绕。2. debug 的时候,不好 debug |
|
26
没有 js/ts 爽。
|
|
feiyuanqiuApr 13, 2019 via Android
27
说句题外话,filter 这名字取得真不好,每次用的时候脑子都要转个弯,我觉得它应该叫 retain
再增加一个 predict 为 true 时抛弃元素的方法,叫 filter 就贴切了 |
|
lihongjie0209Apr 13, 2019
28
@NeinChn 要是机器值钱的话可以直接用 c++, 而不是纠结用 for 还是 foreach
|
|
lihongjie0209Apr 13, 2019
29
@RobberPhex
1. stream 逻辑复杂和几百行的函数一样,都可以通过提取函数的方式重构 2. idea 中有 stream debug 插件可以看看 3. stream 多数情况下就是做三个操作 map reduce filter,你只需看 stream 的返回值就可以了, 一般不需要到 stream 的内部 debug |
|
mreasonyangApr 13, 2019 via iPhone
30
@dyxLike 按网上测评确实有差距,但高 QPS 亲测,对于 IO 密集型业务来说可以忽略不计。CPU 密集型的没实测过不好说,但个人感觉对于绝大部分业务来说也是可以接受的。
|
|
zekApr 13, 2019 via iPhone
31
strem 可读性差一点吧
|
|
k9990009Apr 13, 2019 via Android
32
stream 很好用 ,仅仅是 foreach,就没必要用了。
map groupBy filter reduce sort limit 写起来很爽 |
|
bduqwApr 13, 2019 via Android
33
kotlin 了解一下,跟 Java 一块写爽的一批,spring 官方也支持
|
|
agagegaApr 13, 2019 via iPhone
35
@feiyuanqiu Ruby 里面叫 select 和 reject,我觉得很贴切
|
|
quickmaApr 14, 2019
36
最近用得越来越多了。
|
|
esliznApr 14, 2019
37
steam 用的挺多的,下班后经常用。。。
|
|
TheBestSivirApr 14, 2019
38
@zek 为什么这么觉得。。。天哪
|
|
winewayApr 14, 2019 via iPhone
39
用的不多,都是直接.asScala
|
|
taaaangApr 14, 2019
40
爽到飞起
|
|
sagaxuApr 14, 2019 via Android
41
2015 年开始用 stream,2017 年开始迁移到 kotlin
|
|
hantsyApr 14, 2019
42
@bduqw 我不觉得 Kotlin 写程序会爽很多。Java 8 以后,语法方面一直借鉴了其他语言的优秀设计,已经大大简化了。
https://github.com/hantsy/spring-webmvc-functional-sample |
|
anakinskyApr 18, 2019
43
建议少用,隐藏了业务复杂性 可读性差 调试困难,自己爽的飞起,你新来的同事就苦逼了
|