为了账号安全,请及时绑定邮箱和手机立即绑定

Java初始化List,根据另一个Size

Java初始化List,根据另一个Size

慕码人8056858 2024-01-28 16:42:36
我想做一些初始化 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 来代替。以下代码将为您提供一个包含一组固定实例的同步。MapsListConcurrentMapListConcurrentMap

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 还支持MultiReaderLists。

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 的提交者。


查看完整回答
反对 回复 2024-01-28
?
蝴蝶不菲

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

    }

}};


查看完整回答
反对 回复 2024-01-28
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信