Java初始化List,根据另一个Size
Java Initialize List, according to another Size
我想做一些事情用非空项初始化 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<>());
}
};
是否可以像以前那样做?
你可以用双括号来完成,但你最终会得到一个 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<>());
}
}};
查看此答案了解更多详情:Efficiency of Java "Double Brace Initialization"?
如果您愿意使用第三方库,这应该适用于 Eclipse Collections:
public static final List<Map<String, String>> LIST_GROUP_MAP =
Lists.mutable.withNValues(SIZE_LIST_GROUP_MAP, HashMap::new);
考虑到您要在静态变量中存储包含可变 Maps
的可变 List
,您可能需要考虑使用同步 List
和 synchronized 或 ConcurrentMap
相反。以下代码将为您提供一个同步 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 Collections 的提交者。
我想做一些事情用非空项初始化 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<>());
}
};
是否可以像以前那样做?
你可以用双括号来完成,但你最终会得到一个 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<>());
}
}};
查看此答案了解更多详情:Efficiency of Java "Double Brace Initialization"?
如果您愿意使用第三方库,这应该适用于 Eclipse Collections:
public static final List<Map<String, String>> LIST_GROUP_MAP =
Lists.mutable.withNValues(SIZE_LIST_GROUP_MAP, HashMap::new);
考虑到您要在静态变量中存储包含可变 Maps
的可变 List
,您可能需要考虑使用同步 List
和 synchronized 或 ConcurrentMap
相反。以下代码将为您提供一个同步 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 Collections 的提交者。