Если я вызываю сбор в последовательном потоке (например, из вызова Collection.stream()), будет ли он использовать параметр объединителя, который я передаю для сбора? Я полагаю, но не вижу ничего в документации. Если я прав, то, к сожалению, мне придётся поставлять то, что я знаю, не будет использоваться (если я знаю, что это последовательный поток).
Имеет ли последовательный поток в Java 8 параметр combiner при вызове collect?
Ответ 1
Имейте в виду, что вы разрабатываете спецификации интерфейса - не против реализации. Реализация может измениться со следующей версией Java, тогда как спецификация должна оставаться стабильной.
В спецификации нет различий между последовательными и параллельными потоками. По этой причине вы должны предположить, что объединитель может использоваться. На самом деле есть хорошие примеры, показывающие, что комбинаторы для последовательных потоков могут улучшить производительность. Например, следующая операция сокращения объединяет список строк. Выполнение кода без объединителя имеет квадратичную сложность. Разумное выполнение с объединителем может уменьшить время выполнения по величинам.
List<String> tokens = ...;
String result = tokens.stream().reduce("", String::concat, String::concat);