如何仅按键对guava的多重Map进行排序?

k0pti3hp  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(460)

我有Guava图书馆的Map。我只想按键排序。我试过:

  1. Multimap<String, MyObj> sortedMultiMap =
  2. TreeMultimap.create(Ordering.from(new Comparator<String>() {
  3. @Override
  4. public int compare(String lhs, String rhs) {
  5. //my comparison here
  6. }
  7. }), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable
  8. sortedMultiMap.putAll(notSortedMultiMap);

但正如您所看到的,treemultimap.create方法有两个参数-键和值的比较器。如何仅按键对多重Map进行排序?

798qvoo8

798qvoo81#

更新后的答案从路易斯瓦瑟曼即使我原来的答案解决了问题,并回答了问题,我认为这是更优雅的解决办法。

  1. Multimap<String, MyObj> multimap =
  2. MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build();

你可以用 Ordering.arbitrary() 作为第二个参数,它不需要对象来实现 Comparable .
如果需要插入顺序,可以使用

  1. Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
  2. Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/),
  3. Lists::newLinkedList);
ecfsfe2w

ecfsfe2w2#

使用 MultimapBuilder :

  1. Multimap<String, MyObj> multimap =
  2. MultimapBuilder.treeKeys().linkedListValues().build();

相关问题