我想用非null项初始化ArrayList,这取决于另一个变量的大小。
private static final int SIZE_LIST_GROUP_MAP = 10;
public static final List<Map<String, String>> LIST_GROUP_MAP = new ArrayList<>() {
for(int i=0; i < SIZE_LIST_GROUP_MAP; i++)
{
add(new HashMap<>());
}
};
以前有可能做那样的事吗?
如果您对使用第三方库持开放态度,这应该与Eclipse Collections:一起使用
public static final List<Map<String, String>> LIST_GROUP_MAP =
Lists.mutable.withNValues(SIZE_LIST_GROUP_MAP, HashMap::new);
考虑到您将包含可变Maps
的可变List
存储在静态变量中,您可能需要考虑使用带有synchronized或ConcurrentMap
s的synchronizedList
。下面的代码将为您提供一个同步的List
,其中包含一组固定的ConcurrentMap
实例。
public static final List<Map<String, String>> LIST_GROUP_MAP =
Lists.mutable.<Map<String, String>>withNValues(
SIZE_LIST_GROUP_MAP,
ConcurrentHashMap::new).asSynchronized()
Eclipse Collections还支持MultiReaderList
s。
public static final List<Map<String, String>> LIST_GROUP_MAP =
Lists.multiReader.withNValues(SIZE_LIST_GROUP_MAP, ConcurrentHashMap::new)
最后,如果静态List
的大小永远不会改变,那么您可以使其不可变,如下所示:
public static final ImmutableList<Map<String, String>> LIST_GROUP_MAP =
Lists.mutable.<Map<String, String>>withNValues(
SIZE_LIST_GROUP_MAP,
ConcurrentHashMap::new).toImmutable();
注意:我是Eclipse集合的提交者。
您可以使用双大括号来完成此操作,但最终会得到ArrayList的子类:
private static final int SIZE_LIST_GROUP_MAP = 10;
public static final List<Map<String, String>> LIST_GROUP_MAP = new ArrayList<>() {{
for(int i=0; i < SIZE_LIST_GROUP_MAP; i++)
{
add(new HashMap<>());
}
}};
查看这个答案以了解更多细节:Java的效率";双支架初始化";?