是否有用于创建具有指定大小和内容的列表的实用方法?

时间:2011-05-26 17:03:02

标签: java apache-commons utility utility-method

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 个答案:

答案 0 :(得分:14)

collections util类将帮助您

list = Collections.nCopies(length,contents);

或者如果你想要一个可变列表

list = new ArrayList<T>(Collections.nCopies(length,contents));

答案 1 :(得分:1)

Google Guava有以下内容:

newArrayListWithExpectedSize(int estimatedSize)

newArrayList(E... elements)

但是你不能同时做两件事,如果它有用的话可能会提交一个补丁。更多信息:

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Lists.html

答案 2 :(得分:0)

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 );

但它是&#34;支持&#34;通过数组,更改数组的内容将反映在列表中:

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