Как отсортировать компаратор с динамическими параметрами? - PullRequest
2 голосов
/ 04 апреля 2019

Можно ли создать статический Comparator (поэтому мне не нужно пересоздавать объект при каждом сравнении), но все же передать динамическое значение для сравнения?

В следующем примере я хочу передать параметр String dynaval во время сравнения. Но как?

private final Comparator<Person> COMPARATOR = Comparator.comparing(person -> {
     if (person.getFirstname() != null) return person.getFirstname();
     return evaluateWithDynamicProperty(person, dynaval);
}

Collections.sort(persons, COMPARATOR); //TODO how to pass dynamic String?

1 Ответ

5 голосов
/ 04 апреля 2019

Сделай метод:

private final Comparator<Person> personComparator(String dynaValue) {
  return Comparator.comparing(person -> {
     if (person.getFirstname() != null) return person.getFirstname();
     return evaluateWithDynamicProperty(person, dynaval);
}

вызывать как:

Collections.sort(persons, personComparator(dynaValue));

Или используйте лямбду:

String personComparatorFn(Person person, String dynaValue) {
     if (person.getFirstname() != null) return person.getFirstname();
     return evaluateWithDynamicProperty(person, dynaval);
}

и вызывать как:

Collections.sort(persons, Comparator.comparing(p -> personComparatorFn(p, dynaValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...