В Guava, учитывая Collection<E>
и элемент e
типа e
, который я знаю, находится в коллекции, я хотел бы создать пользовательский Ordering<E>
, который сначала сортирует e
, а затем остальную часть коллекции. Однако способ попасть туда кажется ужасно сложным:
Collection<String> values = ImmutableList.of("apples", "oranges", "pears");
String first = "oranges";
List<String> remainingValues = newArrayList(values); // this
remainingValues.remove(first); // seems
Ordering<String> myOrdering = // very
Ordering.explicit(first, remainingValues.toArray( // complicated!
new String[remainingValues.size()])); // is there an easier way?
То, что я желаю, это что-то вроде этого:
Ordering.explicit(first);
(Я бы хотел, чтобы это сортировало first
в начале и сохраняло порядок всех других элементов, но документы говорят, что полученный Заказ будет вызывать ClassCastException
для элементов, явно не указанных.)
Или вот так:
Ordering.explicit(first, values.toArray(/* etc */));
(Но это не сработает, потому что first
будет повторяющимся значением)
Может ли кто-нибудь придумать краткий способ делать то, что я хочу?
BTW, он не должен быть Ordering
, это также может быть обходным путем для создания Iterable
в указанном порядке, но опять же, это очень сложно:
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));