向我的老师证明java流可能比简单的表现更差的一个好方法

时间:2018-02-10 12:08:39

标签: java optimization java-stream

我的老师确信在循环列表时使用流是很方便的,因为操作可以并行化。

我知道在某些方面这是正确的,但我认为我们总能实现更快的代码来自己编写。

我们在这里谈论的是我们希望尽可能优化的用例。

假设我们从以下代码开始:

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class HelloWorld{

    public static void main (String args[]) {
        List<Something> ls = new ArrayList<Something>();
        ls.add(new Something(true));
        ls.add(new Something(false));

        System.out.println("Active things: " + getActive(ls).size());
    }

     public static List<Something> getActive(List<Something> listOfThings){
        return listOfThings != null? listOfThings.stream().filter(t -> t.isActive()).collect(Collectors.toList()): null;
     }

     public static class Something {
         public Something(boolean active) {
             this.active = active;
         }
         private boolean active;

         public boolean isActive() {
             return active;
         }

         public void justDoIt() {
             System.out.println("done");
         }
     }
}

是不是真的,方法getActive()可以优化,避免使用流?

我知道使用流更容易,但因为它们必须是通用的,所以它们永远不会比编写良好的优化代码更快。

例如,如果列表非常大并且我们知道在三个内核上并行化循环会很方便,那么我们不能在三个不同的线程中执行带有标准迭代器的循环吗?

0 个答案:

没有答案