2016-07-07 5 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