2016-07-07 91 views
0

我有一个数组,我想以不同方式并行处理以加快程序的整体运行时间。以下是按顺序执行所有操作时程序的外观。并行Java进程数组

public static void main(String[] args) { 
    ArrayList<MyObject> array = getLongListOfObjects(); 
    ArrayList<MyObject2> array2 = new ArrayList<MyObject2>(); 
    for(MyObject object : array) { 
     array2.add(firstProcessingMethod(object); 
    } 
    ArrayList<MyObject3> array3 = new ArrayList<MyObject3>(); 
    for(MyObject2 object : array2) { 
     array3.add(secondProcessingMethod(object); 
    } 
    ArrayList<MyObject4> array4 = new ArrayList<MyObject4>(); 
    for(MyObject3 object : array3) { 
     array4.add(thirdProcessingMethod(object); 
    } 
    for(MyObject4 object : array4) { 
     System.out.println(object.toString()); 
    } 
} 

换句话说,我要开始处理阵列firstProcessingMethod()和第一次迭代后,我就可以开始运行secondProcessingMethod()thirdProcessingMethod()而阵列的其余部分仍然通过firstProcessingMethod()去。

回答

4

使用Java 8,您可以使用Streams。

array.parallelStream() 
    .map(ThisClass::firstProcessingMethod) 
    .map(ThisClass::secondProcessingMethod) 
    .map(ThisClass::thirdProcessingMethod) 
    .forEach(System.out::println); 
+0

什么是ThisClass ::引用? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

它指的是包含这些方法的类。这有点像传递一个方法作为参数。有关更多信息,请参见[此问题](http://stackoverflow.com/questions/20001427/double-colon-operator-in-java-8) – 4castle