使用TreeMap而不是HashMap的guava multimap?

Kev*_*vin 11 java guava

我有以下内容:

final SortedMap<Integer,List<Integer>> m = new TreeMap<Integer,List<Integer>>();
Run Code Online (Sandbox Code Playgroud)

我想使用google-guava将其设为多图.但是,我没有看到任何提供包含ArrayList的SortedMap的实现.我只看到HashMap + ArrayList实现(ArrayListMultimap).我想要的实现是否存在?

Col*_*inD 13

Guava有一个TreeMultimap,它按排序顺序存储键和值.但是,这会使用a TreeSet而不是a,List所以它可能不是你想要的.在这种情况下,Guava允许您Multimap使用其中一种Multimaps.new*Multimap方法(如Multimaps.newListMultimap)创建任何您想要的方式.要制作一个像你描述的那样工作,你只需写下:

Map<Integer, Collection<Integer>> map = Maps.newTreeMap();
ListMultimap<Integer, Integer> m = Multimaps.newListMultimap(map,
    new Supplier<List<Integer>>() {
      public List<Integer> get() {
        return Lists.newArrayList(); // assuming you want to use ArrayList
      }
    });
Run Code Online (Sandbox Code Playgroud)

  • @Kevin:与实际使用它的节省相比,创建它的冗长程度是微不足道的.此外,如果您经常这样做,您可以为要使用的集合类型创建可重用的供应商. (2认同)
  • 使用构造函数引用,Java 8将会更加冗长:http://blog.cgdecker.com/2011/04/lambdas-in-java-constructor-references.html;) (2认同)
  • 哇,我完全忘记了我在那篇文章中使用了完全相同的例子.= P (2认同)

Sea*_*oyd 7

这是你如何创造这种野兽:

Multimap<Integer,Integer> multimap = Multimaps.newListMultimap(
    Maps.<Integer, Collection<Integer>>newTreeMap(),
    new Supplier<List<Integer>>() {
        public List<Integer> get() {
            return Lists.newArrayList();
        }
    });
Run Code Online (Sandbox Code Playgroud)