4
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 库是多余的。

4

3 回答 3

16

实用程序类将Collections帮助您:

list = Collections.nCopies(length,contents);

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

list = new ArrayList<T>(Collections.nCopies(length,contents));
           // or whatever List implementation you want.
于 2011-05-26T17:11:33.160 回答
1

谷歌番石榴有以下几点:

newArrayListWithExpectedSize(int estimatedSize)

和:

newArrayList(E... elements)

但你不能两者都做,如果有用的话,可以提交一个补丁。更多信息在这里:

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

于 2011-05-26T17:09:56.597 回答
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 );

但它是由数组“支持”的,因为更改数组的内容将反映在列表中:

String[] ps = new String[]{ "Mercury", "Venus", "Earth", "Mars" };
List<String> planets = Arrays.asList( ps );
ps[3] = "Terra";
assert planets.get(3).equals( "Terra" );
于 2016-04-26T21:26:33.653 回答