Ответ
Нет, не гарантирует. Метод Stream.toList(), появившийся в Java 16, возвращает неизменяемый (unmodifiable) список. Его конкретная реализация (ListN) внутренняя и не является ArrayList.
Практические рекомендации:
- Для получения классического, изменяемого
ArrayListиспользуйтеCollectors.toCollectionс явным указанием поставщика:List<String> list = stream.collect(Collectors.toCollection(ArrayList::new)); - Метод
Collectors.toList()(до Java 16) и в более новых версиях также не гарантирует возвратArrayList. Его контракт лишь обещает "возвращать изменяемый список", но конкретная реализация (ArrayListили, например,Arrays.ArrayList) зависит от версии JDK и должно считаться деталью реализации.
Итог: Если в контракте метода или для последующей работы критически важен именно java.util.ArrayList, всегда используйте Collectors.toCollection(ArrayList::new).