假設我們有以下屬性的對象的參數屬性的對象的列表:排序基於對象
排序此對象的名單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) –