Guava: jak utworzyć wyraźne zamówienie z listy i jednego elementu?
W Guawa, otrzymałemCollection<E>
i elemente
typuE
wiem, że jest w kolekcji, chciałbym stworzyć niestandardowyOrdering<E>
tego rodzajue
najpierw, a potem reszta kolekcji. Jednak droga do tego wydaje się bardzo skomplikowana:
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?
Życzę sobie czegoś takiego:
Ordering.explicit(first);
(Chciałbym to posortowaćfirst
na początku i zachowuj porządek wszystkich innych elementów, ale doktorzy twierdzą, że wynikające z nich zamówienie rzuciClassCastException
dla elementów, które nie są wyraźnie wymienione.)
Lub tak:
Ordering.explicit(first, values.toArray(/* etc */));
(Ale to by się nie powiodło, ponieważfirst
byłaby duplikatem wartości)
Czy ktoś może wymyślić zwięzły sposób robienia tego, co chcę?
BTW, to nie musi byćOrdering
, może to być także obejście dla tworzeniaIterable
w określonym zamówieniu, ale znowu jest to bardzo skomplikowane:
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));