为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2022-09-21 16:55:15

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

?
胡子哥哥

TA贡献1512条经验 获得超6个赞

制作一个方法:


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));


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信