Java8好用吗?很多同事说我小题大做,竟写一些看不懂的东西!!!
取决于你用来实现什么. J8 Stream 大部分是函数式接口 (map/filter/reduce) 和 lambda expression, 本身你可以理解成一个通用的 list. 但与原来的 list 不同的是你可以用 internal iteration (Java 内部控制 iteration). 比如说
不使用 stream (external iteration)
List List<Pet> pets = new ArrayList<>();
for (Person p : people) {
if (p.getAge() > 35) {
pets.add(p.getPet());
}
}
使用 stream (internal iteration)
List<Pet> pets = people.stream()
.filter((p) -> p.getAge() > 35)
.map(Person::getPet)
.collect(Collectors.toList());
另外如果你的 function 的 mapping 没有 side effect 的话, 你可以并行操作 list 中的元素, 在同样的复杂度下完成 map/reduce.
简单来说, 除非性能对你来说非常非常非常非常重要, 或者你的数据量非常非常非常大, 如果不是的话, 在性能方面是没有差别的. 就是一个 OOP (for loop) vs. Functional (map/reduce) 的区别. 对于日常使用来说
好处
- 代码简洁
- 更少的 side-effect
坏处
- Debugging 比较麻烦
- 传统OOP思维转换到函数编程有点绕
记住 - 工程实现实用最重要, 做技术不要花哨!
欢迎来到F社区! 希望能帮到你!
2赞
面向切面编程 → 面向函数编程
ps:parallelStream + reduce还是挺香的
Good noob
循环和map/reduce 什么区别呢?
秀儿