Часто не совсем понятно, как именно параллельный поток разбивает входные данные на куски и в каком порядке соединяются куски. Есть ли способ визуализировать всю процедуру для любого источника потока, чтобы лучше понять, что происходит? Предположим, я создал такой поток:
Stream<Integer> stream = IntStream.range(0, 100).boxed().parallel();
Я хочу увидеть древовидную структуру:
[0..99]
_____/ \_____
| |
[0..49] [50..99]
__/ \__ __/ \__
| | | |
[0..24] [25..49] [50..74] [75..99]
Это означает, что весь диапазон ввода [0..99]
разделен на диапазоны [0..49]
и [50..99]
, которые, в свою очередь, расщепляются дальше. Конечно, такая диаграмма должна отражать реальную работу Stream API, поэтому, если я выполняю некоторую реальную операцию с таким потоком, расщепление должно выполняться таким же образом.