membersound :
Is it possible to create a static Comparator
(so I don't have to recreate the object on each comparison), but still pass a dynamic value for compare?
In the following example, I want to pass a String dynaval
parameter during compare. But how?
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?
Andy Turner :
Make a method:
private final Comparator<Person> personComparator(String dynaValue) {
return Comparator.comparing(person -> {
if (person.getFirstname() != null) return person.getFirstname();
return evaluateWithDynamicProperty(person, dynaval);
}
Invoke like:
Collections.sort(persons, personComparator(dynaValue));
Or, use a lambda:
String personComparatorFn(Person person, String dynaValue) {
if (person.getFirstname() != null) return person.getFirstname();
return evaluateWithDynamicProperty(person, dynaval);
}
and invoke like:
Collections.sort(persons, Comparator.comparing(p -> personComparatorFn(p, dynaValue));