Порядок построения в Гуаве

Я немного новичок в Guava и ее стиле. Я определенно копаюсь в этом, но одна вещь, о которой я постоянно спотыкаюсь, - это порядок связанных методов. Больше всего эта проблема возникает при использовании составных Ordering s. Я постоянно задаю себе такие вопросы, как:

  • Куда идет естественный ?
  • Куда идет 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());
        }};
11
задан Ray 11 February 2011 в 13:04
поделиться