Есть ли полезный метод для создания списка с указанным размером и содержанием? - PullRequest
4 голосов
/ 26 мая 2011
public static <T> List<T> repeat(T contents, int length) {
    List<T> list = new ArrayList<T>();
    for (int i = 0; i < length; i++) {
        list.add(contents);
    }
    return list;
}

Это служебный метод в наших проприетарных библиотеках.Это полезно для создания списков.Например, мне может потребоваться список из 68 вопросительных знаков для генерации большого запроса SQL.Это позволяет вам делать это в одной строке кода вместо четырех строк кода.

Есть ли где-нибудь в java / apache-commons служебный класс, который уже делает это?Я просмотрел ListUtils, CollectionUtils, Arrays, Collections, почти все, что мог придумать, но нигде не могу его найти.Я не люблю хранить в своем коде универсальные служебные методы, если это возможно, поскольку они обычно избыточны с библиотеками apache.

Ответы [ 3 ]

14 голосов
/ 26 мая 2011

класс Util Collection поможет вам

list = Collections.nCopies(length,contents);

или если вам нужен изменяемый список

list = new ArrayList<T>(Collections.nCopies(length,contents));
1 голос
/ 26 мая 2011

Google Guava имеет следующее:

newArrayListWithExpectedSize(int estimatedSize)

и

newArrayList(E... elements)

но вы не можете сделать и то и другое, возможно, отправьте патч, если он будет полезен. Больше информации здесь:

http://guava -libraries.googlecode.com / SVN / багажник / Javadoc / COM / Google / общие / собирать / Lists.html

0 голосов
/ 27 апреля 2016

Как насчет java.util.Arrays.asList?

Вы можете просто передать содержимое как var-arg :

List<String> planets = Arrays.asList( "Mercury", "Venus", "Earth", "Mars" );

Имейте в виду, вы также можете передать массив:

String[] ps = new String[]{ "Mercury", "Venus", "Earth", "Mars" };
List<String> planets = Arrays.asList( ps );

но он «поддерживается» массивом, так как изменение содержимого массива будет отражено в списке:

String[] ps = new String[]{ "Mercury", "Venus", "Earth", "Mars" };
List<String> planets = Arrays.asList( ps );
ps[3] = "Terra";
assert planets.get(3).equals( "Terra" );
...