Я немного новичок в Гуаве, и это стиль.Я определенно копаю это, но одна вещь, которую я продолжаю спотыкаться, - это порядок цепочек методов.Кажется, эта проблема возникает чаще всего при использовании соединения Ordering
s.Я должен продолжать задавать себе такие вопросы, как:
- Куда уходит
natural
? - Куда уходит
nullFirst
(или последний)? - Какой
nullsFirst
что делает?(В приведенном ниже примере, один для хоста, один для фамилии, один для имени?)
Вот пример того, над чем я только что работал.Это выглядит громоздко, и я просто не уверен, правильно ли я все это собрал.У меня есть несколько JUnits для его проверки, и, кажется, все в порядке, но всегда есть такие причудливые граничные случаи.
Ordering<Host> lastNameThenFirstNameOrdering = Ordering.natural().nullsFirst().onResultOf(new Function<Host, String>() {
public String apply(Host host) {
return host.getLastName();
}}).compound(Ordering.natural().nullsFirst().onResultOf(new Function<Host, String>() {
public String apply(Host host) {
return host.getFirstName();
}})).nullsFirst();
Что касается актуального вопроса: есть ли четко определенное правило для того, как эти вещи выполняются?Кажется, это в порядке очереди, но у меня возникают проблемы с сообщением об этом.
edit: Просто хотел указать на большой, уродливый код, который я пытался заменить:
Ordering<Host> ordering2 = new Ordering<Host>() {
public int compare(Host host1, Host host2) {
if (host1 == null || host2 == null) {
return host1 == host2 ? 0 : ((host1 == null) ? -1 : 1);
}
if(host1.getLastName() != null || host2.getLastName() != null){
if (host1.getLastName() == null) {
return -1;
} else if (host2.getLastName() == null) {
return 1;
}
if (host1.getLastName().compareTo(host2.getLastName()) != 0) {
return host1.getLastName().compareTo(host2.getLastName());
}
}
if (host1.getFirstName() == null) {
return -1;
} else if (host2.getFirstName() == null) {
return 1;
}
return host1.getFirstName().compareTo(host2.getFirstName());
}};