如何对具有动态参数的比较器进行排序?

mem*_*und 2 java comparator

是否可以创建一个静态的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?
Run Code Online (Sandbox Code Playgroud)

And*_*ner 5

制作方法:

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

像这样调用:

Collections.sort(persons, personComparator(dynaValue));
Run Code Online (Sandbox Code Playgroud)

或者,使用lambda:

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

并像这样调用:

Collections.sort(persons, Comparator.comparing(p -> personComparatorFn(p, dynaValue));
Run Code Online (Sandbox Code Playgroud)