假设我们有以下属性的对象的参数属性的对象的列表:排序基于对象
排序此对象的名单mylist
,是根据它的属性
attr1
的
public class MyObject {
private String attr1;
private Integer attr2;
//...
public String getAttr1() {
return this.attr1;
}
public Integer getAttr2() {
return this.attr2;
}
}
的一种方式是:
mylist.sort(Comparator.comparing(MyObject::getAttr1));
是否有可能使用的方法在这里面的代码以动态的方式并更换getAttr1
部分与基于其名称返回对象的属性,吸气的方法?喜欢的东西:
public void sortListByAttr(List<MyObject> list, String attr) {
list.sort(Comparator.comparing(MyObject::getGetterByAttr(attr)));
}
的MyObject::getGetterByAttr(attr)
部分不编译,我写它只是作为一个例子来解释我的想法
我试图实现与下面的代码new PropertyDescriptor(attr, MyObject.class).getReadMethod().invoke(new MyObject())
的方法,但它仍然是不可能的从comparing
方法调用方法与参数
第一,给予好评所有。我想用一个枚举来做到这一点。如果你把'findByValue'重命名为'by',我认为它更有意义。 –
@ holi-java这实际上是我在很多项目中看到的模式('findBy'),主要是Spring--所以我有点习惯它 – Eugene
是啊,具体地介绍一个枚举,我们可以获取更多信息,使它以OO方式。那么我们可以用'sort(by(“attr1”)。comparator)'或'process(by(“attr1”)getter) –