Guava的MultiMap如何只按键排序?
How to sort Guava's MultiMap only by keys?
我有 Guava 库中的 MultiMap。我只想按键排序。我试过:
Multimap<String, MyObj> sortedMultiMap =
TreeMultimap.create(Ordering.from(new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
//my comparison here
}
}), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable
sortedMultiMap.putAll(notSortedMultiMap);
但是如您所见,TreeMultiMap.create 方法有 2 个参数 - 键和值的比较器。我如何仅通过键对 MultiMap 进行排序?
Louis Wasserman 回答后更新 即使我原来的回答解决了问题并回答了问题,我认为这是更优雅的解决方案。
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build();
您可以使用 Ordering.arbitrary()
作为第二个参数,它不需要对象实现 Comparable
.
如果需要插入订单,您可以使用类似
Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/),
Lists::newLinkedList);
使用MultimapBuilder
:
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys().linkedListValues().build();
我有 Guava 库中的 MultiMap。我只想按键排序。我试过:
Multimap<String, MyObj> sortedMultiMap =
TreeMultimap.create(Ordering.from(new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
//my comparison here
}
}), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable
sortedMultiMap.putAll(notSortedMultiMap);
但是如您所见,TreeMultiMap.create 方法有 2 个参数 - 键和值的比较器。我如何仅通过键对 MultiMap 进行排序?
Louis Wasserman 回答后更新 即使我原来的回答解决了问题并回答了问题,我认为这是更优雅的解决方案。
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build();
您可以使用 Ordering.arbitrary()
作为第二个参数,它不需要对象实现 Comparable
.
如果需要插入订单,您可以使用类似
Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/),
Lists::newLinkedList);
使用MultimapBuilder
:
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys().linkedListValues().build();