番石榴:如何从列表和单个元素创建显式排序?
2022-09-04 03:02:11
在番石榴中,给定一个我知道在集合中的类型元素,我想创建一个自定义 Ordering<E>
,首先排序,然后排序集合的其余部分。然而,到达那里的方法似乎非常复杂:Collection<E>
e
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
任何人都可以想出一个简洁的方式来做我想做的事情吗?
顺便说一句,它不必是 一个 ,它也可能是在指定顺序中创建一个的解决方法,但同样,这非常复杂:Ordering
Iterable
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));