のパラメータ化属性に基づいてオブジェクトのリスト:その属性に基づいて、このオブジェクトのリストmylist
をソートするのソート我々は次の属性を持つオブジェクトを持っていると仮定すると、オブジェクト
public class MyObject {
private String attr1;
private Integer attr2;
//...
public String getAttr1() {
return this.attr1;
}
public Integer getAttr2() {
return this.attr2;
}
}
1つの方法は、attr1
次のとおりです。
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
方法
まず、upvoteすべてを。私もenumを使ってそれをやりたい'findByValue'の名前を' by'に変更すると、もっと意味があると思います。 –
@ holi-javaこれは実際に私が多くのプロジェクト( 'findBy')、主に春に見たパターンです - それで僕はそれに慣れています – Eugene
ええと、具体的に列挙型を導入して、 OOの方法で。 'sort(by(" attr1 ").company)'または 'process(by(" attr1 ")。getter)'のように書くことができます。 –