Guayaba: ¿Cómo crear un pedido explícito a partir de una lista y un solo elemento?
En guayaba, dada unaCollection<E>
y un elementoe
de tipoE
que sé que está en la colección, me gustaría crear un personalizadoOrdering<E>
que tipoe
Primero y luego el resto de la colección. Sin embargo, la forma de llegar allí parece terriblemente complicada:
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?
Lo que estoy deseando es algo como esto:
Ordering.explicit(first);
(Me gustaría que esto se ordenefirst
al principio y retener el orden de todos los demás elementos, pero los documentos dicen que el Ordenamiento resultante arrojará unClassCastException
para elementos no listados explícitamente.)
O así:
Ordering.explicit(first, values.toArray(/* etc */));
(Pero esto fallaría porquefirst
sería un valor duplicado)
¿Alguien puede idear una forma concisa de hacer lo que quiero?
Por cierto, no tiene que ser unOrdering
, también podría ser una solución para crear unIterable
en la Orden especificada, pero de nuevo, esto es muy complicado:
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));