java8 stream 好用吗?

Java8好用吗?很多同事说我小题大做,竟写一些看不懂的东西!!! :rofl:

取决于你用来实现什么. J8 Stream 大部分是函数式接口 (map/filter/reduce) 和 lambda expression, 本身你可以理解成一个通用的 list. 但与原来的 list 不同的是你可以用 internal iteration (Java 内部控制 iteration). 比如说 :point_down:

不使用 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) 的区别. 对于日常使用来说 :point_down:

好处

  • 代码简洁
  • 更少的 side-effect

坏处

  • Debugging 比较麻烦
  • 传统OOP思维转换到函数编程有点绕

记住 - 工程实现实用最重要, 做技术不要花哨!

欢迎来到F社区! 希望能帮到你!

2 Likes

面向切面编程 → 面向函数编程

ps:parallelStream + reduce还是挺香的 :laughing:

Good noob

循环和map/reduce 什么区别呢?

https://fsou.cc/search?q=循环和map%2Freduce+什么区别呢

:upside_down_face:

1 Like

秀儿