【发布时间】:2021-10-21 11:11:02
【问题描述】:
在 Guava 中有几种方法可以创建排序的不可变 multiMap。一种方法是首先创建一个 ListMultiMap,其键为树,然后将其转换为不可变的 multiMap。
使用 ListMultiMap 我们可以为同一个键创建重复值:
ListMultimap<Integer, String> mutableMap = MultimapBuilder.treeKeys().arrayListValues().build();
return ImmutableListMultimap.copyOf(mutableMap);
使用 TreeMap 我们不会有相同键的重复值:
TreeMultimap<Integer, String> mutableMap = TreeMultimap.create(Ordering.natural(), Ordering.arbitrary());
return ImmutableListMultimap.copyOf(mutableMap);
问题在于,在这两种情况下,不可变接口都是通用的,并且没有提供以排序方式访问键的方法,因此我们可以拥有例如在 Java 的 NavigationalMap 中可以找到 tailMap 和 headMap。
有没有办法在 Guava 中有一个不可变的排序多映射,可以访问 tailMap 和 headMap?还是我需要手动构建一个ImmutableSortedMap<Integer, ImmutableList<String>> 来获得这个功能?
【问题讨论】:
标签: java guava treemap multimap