使用TreeMap而不是HashMap的guava multimap?

问题描述 投票:11回答:2

我有以下内容:

final SortedMap<Integer,List<Integer>> m = new TreeMap<Integer,List<Integer>>();

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

java guava
2个回答
13
投票

Guava有一个TreeMultimap,按排序顺序存储键和值。然而,这使用TreeSet作为值而不是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
      }
    });

7
投票

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

Multimap<Integer,Integer> multimap = Multimaps.newListMultimap(
    Maps.<Integer, Collection<Integer>>newTreeMap(),
    new Supplier<List<Integer>>() {
        public List<Integer> get() {
            return Lists.newArrayList();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.