有没有一种实用的方法可以创建一个指定大小和内容的列表?

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 库重复。


Arrays.fill对你有用吗?http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#fill%28java.lang.Object[],%20java.lang.Object%29 - Santosh Gokak
在这里使用Arrays.fill会有点笨拙,它适用于稍微不同的角色。 - piepera
3个回答

16

Collections 工具类可以帮助你:

list = Collections.nCopies(length,contents);

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

list = new ArrayList<T>(Collections.nCopies(length,contents));
           // or whatever List implementation you want.

谢谢,这正是我所缺少的! - piepera

1

我不确定在上下文中这与使用Arrays.asList()有多大的区别。上面提到的Collections.nCopies()方法非常适合,所以我会使用它。 - piepera

0

使用 java.util.Arrays.asList 怎么样?

你可以将内容作为 可变参数 直接传入:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接