Ръководство за поръчка на Гуава

1. Общ преглед

В тази статия ще разгледаме класа за поръчка от библиотеката на Гуава.

В поръчване клас изпълнява на компаратор интерфейс и ни дава полезна владее API за създаване и верижното сравнение.

Като бърз страничен знак си струва да разгледате и новия API на Comparator.comparing () - който предоставя подобна функционалност; ето практически пример за използване на този API.

2. Създаване на поръчка

Поръчването има полезен метод за изграждане, който връща подходящ екземпляр, който може да се използва в метод sort () в колекции или където и да е другаде, където е необходим екземпляр на Comparator .

Можем да създадем екземпляр на естествена поръчка, като изпълним метода natural ():

List integers = Arrays.asList(3, 2, 1); integers.sort(Ordering.natural()); assertEquals(Arrays.asList(1,2,3), integers);

Да кажем, че имаме колекция от обекти на Person :

class Person { private String name; private Integer age; // standard constructors, getters }

И ние искаме да сортираме списък с такива обекти по възрастово поле. Можем да създадем нашата поръчка по поръчка, която ще направи точно това, като я удължим:

List persons = Arrays.asList(new Person("Michael", 10), new Person("Alice", 3)); Ordering orderingByAge = new Ordering() { @Override public int compare(Person p1, Person p2) { return Ints.compare(p1.age, p2.age); } }; persons.sort(orderingByAge); assertEquals(Arrays.asList(new Person("Alice", 3), new Person("Michael", 10)), persons);

След това можем да използваме нашия orderingByAge и да го предадем на метода sort () .

3. Верижно нареждане

Една полезна характеристика на този клас е, че можем да веригираме различни начини за поръчка. Да приемем, че имаме колекция от лица и искаме да я сортираме по възрастово поле и да имаме нулеви стойности на възрастови полета в началото на списък:

List persons = Arrays.asList( new Person("Michael", 10), new Person("Alice", 3), new Person("Thomas", null)); Ordering ordering = Ordering .natural() .nullsFirst() .onResultOf(new Function() { @Override public Comparable apply(Person person) { return person.age; } }); persons.sort(ordering); assertEquals(Arrays.asList( new Person("Thomas", null), new Person("Alice", 3), new Person("Michael", 10)), persons);

Важното, което трябва да забележите тук, е ред, при който се изпълняват конкретни Поръчки - поръчката е отдясно наляво. Така че първо се изпълнява onResultOf () и този метод извлича полето, което искаме да сравним.

След това се изпълнява сравнител nullFirst () . Поради това, получената сортирана колекция ще има обект Person, който има нула като възрастово поле в началото на списъка.

В края на процеса на сортиране, възрастовите полета се сравняват, като се използва естествено подреждане, както е посочено с помощта на метод natural () .

4. Заключение

В тази статия разгледахме Клас за поръчка от библиотека Guava, който ни позволява да създадем по-плавни и елегантни Comparator s. Създадохме нашето персонализирано поръчване, използвахме предварително дефинирани от API и ги веригирахме, за да постигнем повече персонализиран ред.

Внедряването на всички тези примери и кодови фрагменти може да бъде намерено в проекта GitHub - това е проект, базиран на Maven, така че трябва да е лесно да се импортира и да се изпълнява както е.