猿问

如何使用动态参数对比较器进行排序?

是否可以创建静态(因此我不必在每次比较时重新创建对象),但仍会传递用于比较的动态值?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?


心有法竹
浏览 121回答 1
1回答

胡子哥哥

制作一个方法:private final Comparator<Person> personComparator(String dynaValue) {&nbsp; return Comparator.comparing(person -> {&nbsp; &nbsp; &nbsp;if (person.getFirstname() != null) return person.getFirstname();&nbsp; &nbsp; &nbsp;return evaluateWithDynamicProperty(person, dynaval);}调用类似如下:Collections.sort(persons, personComparator(dynaValue));或者,使用 λ:String personComparatorFn(Person person, String dynaValue) {&nbsp; &nbsp; &nbsp;if (person.getFirstname() != null) return person.getFirstname();&nbsp; &nbsp; &nbsp;return evaluateWithDynamicProperty(person, dynaval);}并调用如下:Collections.sort(persons, Comparator.comparing(p -> personComparatorFn(p, dynaValue));
随时随地看视频慕课网APP

相关分类

Java
我要回答