La principal característica del nuevo Fork/Join de JavaSE 1.7 consiste en dividir una estructura de datos en partes, más o menos iguales, para ejecutar operaciones en paralelo con cada parte, y agregar los resultados obtenidos al final. Sigue la idea "Divide y vencerás".
La mayoría, por no decir todos, los ejemplos que se encuentran se limitan a dividir por la mitad, cuando lo más eficiente sería dividir en función del número de procesadores existentes.
Por eso quiero proponer un problema (que no tiene nada que ver con el uso de Fork/Join), que consiste en encontrar una manera eficiente y clara de dividir un array en partes, aproximadamente iguales.
Dada una clase como la siguiente:
public class SplitArray<T> {
private final T[] array;
public SplitArray(final T[] array) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException("array cannot be null or empty");
}
this.array = Arrays.copyOf(array, array.length);
}
public List<T[]> splitArray(final int divisions) {
final List<T[]> result;
// aquí va el código que se busca
return result;
}
}
se trata de encontrar un código que devuelva el resultado deseado.
El parámetro divisions indica el número de divisiones deseadas.