java - 如何使 Map<String, List<String> 不可修改?

标签 java collections map unmodifiable

<分区>

java.util.Collections类允许我使集合实例不可修改。下面的方法

protected Map<String, List<String>> getCacheData() {
    return Collections.unmodifiableMap(tableColumnCache);
}

返回一个不可修改的 Map , 所以 UnsupportedOperationException是由于试图更改 map 实例引起的。

@Test(expected = UnsupportedOperationException.class)
public void checkGetCacheData_Unmodifiable() {
    Map<String, List<String>> cacheData = cache.getCacheData();
    cacheData.remove("SomeItem");
}

不幸的是所有List<String> children 不是不可修改的。所以我想知道是否有办法为子值强制执行不可移动的行为 List<String>也?

当然,或者我可以遍历 map 键值对,使列表不可修改并重新组装 map 。

最佳答案

您需要一个充满 ImmutableList 实例的 ImmutableMap。使用 Guava以保持你的理智。

首先,创建您需要的 ImmutableList 实例:

ImmutableList<String> list1 = ImmutableList.of(string1, string2, etc);
ImmutableList<String> list2 = ImmutableList.of(string1, string2, etc);

然后创建您的 ImmutableMap:

ImmutableMap<String,List<String>> map = ImmutableMap.of("list1", list1, "list2", list2);

有多种方法可以实例化不可变列表和映射,包括构建器模式。查看 ImmutableList 的 JavaDocs和 ImmutableMap了解更多详情。

关于java - 如何使 Map<String, List<String> 不可修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095874/

相关文章:

java - 如何将文本移动到 JButton 的底部

java - 我的 MVC 监听器如何区分不同的按钮

javascript - Underscore.js:替换集合中的项目

java - HashMap 值替换旧值,即使对于 java 中的新键

scala - 如何在Scala中将对象列表转换为两个字段的映射

if-statement - NetLogo 列表和条件修改

java - 如何从组合 boolean 值中获取十六进制值?

java - 使用 Spring Boot 用 groovy 解析日期

java - 在 LinkedHashMap 中移动项目

c++ - 使用++ 运算符递增 map<string, int>