Вообще говоря, toString()
любых объектов не содержит информации для воспроизведения исходного объекта без какой-либо дополнительной информации.
В вашем конкретном случае пример может быть создан многими различными ArrayList
экземплярами (а также почти всеми другими List
реализациями, которые имеют идентичные toString()
) реализации.
В качестве крайнего примера, представьте ArrayList
, который содержит один элемент, который является String
с содержимым 15.82, 15.870000000000001, 15.92, 16.32, 16.32, 16.32, 16.32, 17.05, 17.05, 17.05, 17.05, 18.29, 18.29, 19.16
. Это ArrayList
даст тот же результат, что и ваш исходный ArrayList
. А поскольку два разных входа выдают один и тот же выход, невозможно изменить эту функцию без дополнительной информации.
Если, однако, у нас есть дополнительная информация, такая как тип содержимого оригинала ArrayList
, то в некоторых случаях это становится возможным. Если мы знаем, что все элементы List
были типа Double
, то на самом деле это довольно просто:
public static List<Double> stringToList(final String input) {
String[] elements = input.substring(1, input.length() - 1).split(", ");
List<Double> result = new ArrayList<Double>(elements.length);
for (String item : elements) {
result.add(Double.valueOf(item));
}
return result;
}
Конечно, это не однострочник, но не так уж и плохо.