Нужно что-то вроде getTotal (ClassName, ListOfObjectsOfClass, numericFieldOfClass) - PullRequest
2 голосов
/ 14 декабря 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Я только что написал простой метод, который вычисляет сумму некоторых свойств в списке:

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 .

Вот пример его использования:

открытый класс 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) {
...
2 голосов
/ 14 декабря 2011

AFAIK не в стандартном JDK, но для этого есть функции во многих существующих библиотеках. Например, с lambdaj вы сможете сделать sumFrom(objects, on(Object.class).getField())

...