私はグアバに少し慣れていません、そしてそれはスタイルです。私は間違いなくそれを掘り下げていますが、私がつまずき続けることの1つは、連鎖メソッドの順序です。私がこの問題を最も抱えていると思われるのは、化合物を使用する場合Ordering
です。私は自分自身に次のような質問をし続ける必要があります:
- どこへ
natural
行くの? nullFirst
(または最後の)どこに行きますか?- どっち
nullsFirst
がなに?(以下の例では、1つはホスト用、1つは姓用、もう1つは名用ですか?)
これが私が今取り組んでいたものの例です。面倒そうに見えますが、全部うまくまとめたかどうかはわかりません。私はそれをテストするためにいくつかのJUnitを持っています、そしてそれは大丈夫のようです、しかしそれらの風変わりな境界のケースは常にあります。
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();
実際の質問について:これらのものがどのように実行されるかについて明確に定義されたルールはありますか?それは最後から最初のようですが、私はそれを伝えるのに苦労しています。
編集:私が置き換えようとしていた大きくて醜いコードを指摘したかっただけです:
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());
}};