在 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
到开头并保留所有其他元素的顺序,但文档说生成的 Ordering 将抛出一个ClassCastException
未明确列出的元素。)
或者像这样:
Ordering.explicit(first, values.toArray(/* etc */));
(但这会失败,因为这first
将是一个重复的值)
任何人都可以想出一种简洁的方式来做我想做的事吗?
顺便说一句,它不一定是Ordering
,它也可以是Iterable
在指定的 Order 中创建一个的解决方法,但同样,这非常复杂:
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));