我想做一些初始化 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<>()); } };以前可以做类似的事情吗?
2 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
如果您愿意使用第三方库,这应该适用于Eclipse Collections:
public static final List<Map<String, String>> LIST_GROUP_MAP = Lists.mutable.withNValues(SIZE_LIST_GROUP_MAP, HashMap::new);
考虑到您要在静态变量中存储List
包含可变的可变变量,您可能需要考虑使用同步与同步或s 来代替。以下代码将为您提供一个包含一组固定实例的同步。Maps
List
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 的提交者。
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
您可以使用双大括号来完成此操作,但最终会得到 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<>());
}
}};
添加回答
举报
0/150
提交
取消