[#] Вычисление факториала или мощь Stream API
habrabot(difrex,1) — All
2015-04-15 16:00:02


На днях появилась статья [5nw][1] [Два способа быстрого вычисления факториала][2], в которой приводится идея ускорения подсчёта факториала с помощью группировки перемножаемых чисел в дерево по принципу «разделяй и властвуй». Взглянув на это, я сразу понял, что тут параллельные потоки Java проявят себя во всей красе: ведь они делят задачу на подзадачи с помощью сплитераторов именно таким образом. Получается, что быстрая реализация будет ещё и красивой:

public static BigInteger streamedParallel(int n) {
if(n < 2) return BigInteger.valueOf(1);
return IntStream.rangeClosed(2, n).parallel().mapToObj(BigInteger::valueOf).reduce(BigInteger::multiply).get();
}

[Читать дальше →][3]

[1]: http://habrahabr.ru/users/5nw/
[2]: http://habrahabr.ru/post/255761/
[3]: http://habrahabr.ru/post/255813/#habracut