2011-12-14 3 views
2

У меня есть класс, например, public class Item { int price; String name; // getters and setters } У меня есть такие 1000 или более объектов (просто пример). Для каждого товара есть другая цена. И все объекты этого предмета находятся в List<Item>. Мое требование - получить полную стоимость (например, цена за товар 1-го пункта в списке).Нужно что-то вроде getTotal (ClassName, ListOfObjectsOfClass, numericFieldOfClass)

Есть ли какая-либо утилита или способ, с помощью которого я могу получить итоговое значение для конкретного поля (т. Е. Общая стоимость всех предметов). Я просто даю List, ClassName и fieldName Я получаю итоговое значение? Я знаю, что мы можем получить общее количество, итерации по списку, вызов метода get добавить все и сохранить в некоторой переменной.?

Заранее спасибо.

+0

Этот вопрос похож на другой: [вопрос] (http://stackoverflow.com/questions/ 5963847/есть возможность-,-из-суммы-в-ArrayList-без зацикливание) – ArtemStorozhuk

ответ

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 {
частных ИНТ х;

общественного MyObject() {}

общественного INT GetX() {возвращение х; }

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, но есть функции для этого во многих существующих библиотеках. Например, с lambdaj вы должны быть в состоянии сделать sumFrom(objects, on(Object.class).getField())