2011-12-14 7 views
2

クラスがあります。public class Item { int price; String name; // getters and setters } 私はそのような1000以上のオブジェクトを持っています。 商品ごとに価格が異なります。そして、この商品オブジェクトはすべてList<Item>にあります。私の要求は総価格(すなわち、リストの1番目のアイテムから1番目のアイテムの価格)を得ることです。getTotal(ClassName、ListOfObjectsOfClass、numericFieldOfClass)のようなものが必要です

特定のフィールドの合計(つまり、すべてのアイテムの合計価格)を得るためのユーティリティや方法はありますか?私はちょうどリスト、ClassNameとfieldNameを与える私は合計を得る?私はリストを反復して合計を得ることができることを知っています。getメソッドを呼び出すと、すべての変数が追加され、ストアされます。

ありがとうございます。

+0

この質問は別のものと同様である。 [質問](http://stackoverflow.com/questions/ 5963847 /ループのないアライリストの可能性がある) – ArtemStorozhuk

答えて

2

を行うことができるはず。必要なライブラリはapache siteから直接ダウンロードできます。

ここではそれを使用しての例です:

パブリッククラスMyObjectに{
プライベートint型のX;

パブリックMyObjectに(){}

公共INTのgetX(){戻りX。 }

public void setX(int x){this.x = x; }

}

和を計算:

List<MyObject> l = new ArrayList<MyObject>(); 
... 
try { 
int a = sum(l,"x"); 
System.out.print(a); 
} catch (IllegalAccessException e) { 
... 
2

AFAIKは標準JDKには含まれていませんが、多くの既存のライブラリにはこのための関数があります。私はjavabeans技術を使用し、このために

public static <E> Integer sum(List<E> obejcts, String propertyName) throws 
     IllegalAccessException, 
     InvocationTargetException, 
     NoSuchMethodException { 
    Integer sum = 0; 
    for (Object o: obejcts) { 
     sum += (Integer)PropertyUtils.getProperty(o, propertyName); 
    } 
    return sum; 
} 

lambdajとたとえば、あなたは、私はちょうど、リスト内のいくつかのプロパティの合計を計算し、簡単な方法を書かれているsumFrom(objects, on(Object.class).getField())