Quizz : que fait ce code ?

Quizz : Que fait cette méthode ?

Question subsidiaire : comment rendre le code plus lisible (en Java) ?

public static <D, R> List<R> inParallel(int nbThreads, List<D> dataList,
final Function<D, R> dataToAction) {
Function<D, Callable<R>> dataToCallable = new Function<D, Callable<R>>() {
@Override
public Callable<R> apply(final D data) {
return new Callable<R>() {
@Override
public R call() {
return dataToAction.apply(data);
}
};
}
};

Function<Future<R>, R> futureToResult = new Function<Future<R>, R>() {
@Override
public R apply(Future<R> future) {
try {
return future.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};

ExecutorService executorService = Executors.newFixedThreadPool(nbThreads);

try {
List<Callable<R>> actions = Lists.transform(dataList, dataToCallable);
List<Future<R>> results = executorService.invokeAll(actions);

return Lists.transform(results, futureToResult);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
executorService.shutdown();
}
}

4 thoughts on “Quizz : que fait ce code ?”

  1. Rien compris. Ca doit être une API que je ne connais pas.
    L’idée générale est d’exécuter des tâches en parallèle sur un jeu de données.
    Pour la lisibilité, je pense que les inner class gagnent à être remplacées par des classes classiques.

  2. Bon, ben, tu essaies de faire l’équivalent des closures, sur des threads en parallèle.
    A part externaliser des choses dans des librairies utilitaires, je ne suis pas sûr que tu puisses faire mieux.

    Groovy est hors limite pour ton projet?

  3. C’est bien ça. Je trouve cet outil extrêmement pratique. Par contre, je ne vous félicite pas pour les propositions d’amélioration 😉

Comments are closed.