Канонический список в Java? - PullRequest
3 голосов
/ 27 ноября 2010

Есть ли что-то подобное в любой стандартной библиотеке (например, apache-commons, guava)?

public static <T> List<T> toList(Iterable<T> iterable) {
    if (iterable instanceof List)
        return (List<T>)iterable;

    if (iterable instanceof Collection)
        return new ArrayList<T>((Collection<T>)iterable);

    List<T> result = new ArrayList<T>();
    for (T item : iterable)
        result.add(item);

    return result;
}

1 Ответ

9 голосов
/ 27 ноября 2010

Я так не думаю, потому что ваша реализация делает две совершенно разные вещи:

  • Если аргумент является списком, он возвращает его. Поэтому возвращаемый список будет «живым представлением» аргумента. Изменения в каждом из списков видны в другом.
  • Если аргумент не является списком, он возвращает его копию. Возвращенный список будет независим от аргумента.

Эти две вещи настолько различны, что ни одна здравомыслящая библиотека общего назначения не объединит их в один метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...