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

My-*_*-Is 5 java collections unmodifiable map

java.util.Collections类允许我做集合实例不可修改.以下方法

protected Map<String, List<String>> getCacheData() {
    return Collections.unmodifiableMap(tableColumnCache);
}
Run Code Online (Sandbox Code Playgroud)

返回一个umodifiable Map,因此UnsupportedOperationException尝试更改map实例会导致a.

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

不幸的是,所有List<String>孩子都不可修改.所以我想知道是否有办法强制实施儿童价值观的List<String>无法改变的行为?

当然,或者我可以迭代映射键值对,使列表不可修改并重新组合映射.

Jas*_*ols 5

您需要一个充满ImmutableList实例的ImmutableMap.使用番石榴来保持你的理智.

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

ImmutableList<String> list1 = ImmutableList.of(string1, string2, etc);
ImmutableList<String> list2 = ImmutableList.of(string1, string2, etc);
Run Code Online (Sandbox Code Playgroud)

然后创建你的ImmutableMap:

ImmutableMap<String,List<String>> map = ImmutableMap.of("list1", list1, "list2", list2);
Run Code Online (Sandbox Code Playgroud)

有许多方法可以实例化不可变列表和映射,包括构建器模式.查看有关ImmutableListImmutableMap的JavaDocs以获取更多详细信息.