如何使用动态参数对比较器进行排序?
How to sort a Comparator with dynamic parameters?
是否可以创建一个静态的 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?
制作方法:
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));
或者,使用 lambda:
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));
是否可以创建一个静态的 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?
制作方法:
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));
或者,使用 lambda:
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));