Я не знаю о тех операторах C ++, о которых вы упомянули, но я предполагаю, что означает, что вам нужен компаратор, который сравнивает коллекции лексикографически.
Гуава имеет это благодаря своему превосходному классу Ordering
: Ordering.lexicographic ()
Возвращает новый порядок, который сортирует итерации, сравнивая соответствующие элементы попарно, пока не будет найден ненулевой результат;навязывает «словарный порядок».Если достигнут конец одной итерации, но не другой, более короткая итерация считается меньшей, чем более длинная.Например, лексикографическое естественное упорядочивание целых чисел учитывает [] < [1] < [1, 1] < [1, 2] < [2]
.
Скажем, вы хотите заказать List<List<String>>
на основе естественного порядка String
:
List<List<String>> lists = ...;
Ordering<Iterable<String>> comparator = Ordering.natural().lexicographical();
Collections.sort(lists, comparator);
Учитывая, что это часть класса Ordering
, вы также получаете его полную мощность, включая возможность использовать его с любым произвольным компаратором:
/*
* This comparator will use a case insensitive comparison of individual
* strings in determining the ordering.
*/
Ordering<Iterable<String>> comparator =
Ordering.from(String.CASE_INSENSITIVE_ORDER).lexicographical();
/*
* This comparator uses a Function<Foo, Long> (Foo.GET_ID) to compare the IDs
* of Foo instances.
*/
Ordering<Iterable<Foo>> comparator =
Ordering.natural().onResultOf(Foo.GET_ID).lexicographical();