需要类似getTotal(ClassName,ListOfObjectsOfClass,numericFieldOfClass)

时间:2011-12-14 13:06:27

标签: java utility utility-method

我上课时说public class Item { int price; String name; // getters and setters } 我有1000个或更多的对象(只是示例)。 每件商品都有不同的价格。所有这些项目对象都在List<Item>我的要求是获得总价格(即第1项到第n项的价格)。

是否有任何实用程序或方法可以获得特定字段的总计(即所有项目的总价格)。我只给List,ClassName和fieldName我得到的总数?我知道我们可以通过遍历列表获得总数,调用get方法添加所有内容并存储在某个变量中。?

提前致谢。

2 个答案:

答案 0 :(得分:2)

AFAIK不在标准JDK中,但在许多现有库中都有这方面的功能。例如,使用lambdaj,您应该可以执行sumFrom(objects, on(Object.class).getField())

答案 1 :(得分:2)

我刚刚编写了一个简单的方法来计算列表中某些属性的总和:

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

为此,我使用javabeans技术。您可以直接从apache site下载所需的库。

以下是使用它的示例:

  

公共类MyObject {
  private int x;

     

public MyObject(){             }

     

public int getX(){return 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) {
...