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
明示的にリストされていない for 要素をスローします。)
またはこのように:
Ordering.explicit(first, values.toArray(/* etc */));
first
(ただし、値が重複するため、これは失敗します)
誰かが私がやりたいことを行う簡潔な方法を思い付くことができますか?
ところで、それは である必要はありません。指定された順序でOrdering
を作成するための回避策になることもありますIterable
が、これも非常に複雑です。
Iterable<String> sorted = Iterables.concat(
ImmutableList.of(first),
Iterables.filter(values, not(equalTo(first))));