Сортировка Multimap по ключам только в Java

Я хотел бы иметь cgccMultimap , который сортируется только по ключам. Значения не следует сортировать. Я пытался создать что-то с помощью TreeMultimap гуавы, но я не могу его использовать, потому что тип значения не реализует Comparable .

public class MyObject /* doesn't implement Comparable */ {
  private String name;
  private int score;
  // Getters/setters are implemented
  public static Function<MyObject,Integer> myObjectToScore {
    @Override public Integer apply (MyObject o) { return o.score; }
  }
  public static Multimap<Integer,MyObject> indexOnScore(Iterable<MyObject> i) {
    Multimap<Integer,MyObject> m = Multimaps.index(i, myObjectToScore());
    // Do the sort of the keys.
    return m;
  }
}

Я думал о получении SortedSet ключей, затем итерация по каждому из этих ключей в отсортированном наборе для получения различных значений, но я надеялся использовать существующую (еще не обнаруженную) функцию в Guava, а не использовать этот вид хака .

Примечание: Я не буду заставлять MyObject реализовывать Comparable , потому что это не имеет смысла с моим реальным объектом.


Пример ввода / вывода:

Set<MyObject> s = Sets.newHashSet(
  new MyObject("a", 2),
  new MyObject("b", 3),
  new MyObject("c", 1),
  new MyObject("d", 3),
  new MyObject("e", 1)
); // Assuming constructor MyObject(String name, int score)

for (Map.Entry<Integer, MyObject> e: MyObject.indexedOnScore(s).entries()) {
  System.out.printf("%d -> %s%n", e.getKey(), e.getValue().getName());
}

Печать:

1 -> c // or switched with line below
1 -> e
2 -> a
3 -> b // or switched with line below
3 -> d
24
задан Olivier Grégoire 31 March 2011 в 15:13
поделиться