帮助总结一个arraylist

时间:2010-09-13 15:46:00

标签: java

目前,下面的代码会给我一个逐行列出的值,如果我想总计一个值的总和,有人可以给我一个例子来做这个吗?

if (value != null && !value.isEmpty()) {
    Set set = value.keySet();
    Object[] key = set.toArray();
    Arrays.sort(key);
    // System.out.println("test" + Arrays.asList(key));

    for (int i = 0; i < key.length; i++) {
        // System.out.println(value.get((String)key[i]))
        ArrayList list = (ArrayList) value.get((String) key[i]);

        if (list != null && !list.isEmpty()) {
            Iterator iter = list.iterator();
            double itemValue = 0;

            while (iter.hasNext()) {
                Iemunbuf p = (Itemunbuf) iter.next();

                if (p != null) {
                    propertyValue = itemValue + p.getitemValue().doubleValue();
                    System.out.println(itemValue);
                }

                // buf2.append(NL);
                buf2.append(t1 + "\t");
                // System.out.println(t1);
                buf2.append(NL);
            }

            buf1.append(NL);
            double amount = itemValue;
            buf1.append("  " + money.format(amount) + "  ");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

在for循环循环之上,输入:

double totalAmount = 0.0;

在for循环中,在double amount = itemValue行之后,放置:

totalAmount += amount;

答案 1 :(得分:1)

不知道为什么你只为打印它而分配一个值 - 我怀疑你的意思是使用金额作为总计。好吧,它不会按你所写的方式工作,因为在你的循环中声明了金额,所以在你完成任务之前总是会初始化为0.0 - 这是一个平坦的分配而不是求和。如Erick建议的那样在循环之外声明金额然后说金额+ = itemValue。

希望我能正确理解你的问题。

答案 2 :(得分:0)

根据您发布的代码判断您的值变量的类型为Map<String, ArrayList<Itemunbuf>>,但由于您没有使用任何泛型类型,因此您可能需要首先阅读(Sun tutorial)。< / p>

您可以将代码简化为以下

if (value != null) {
    for (ArrayList<Itemunbuf> list : value.getValues()) {
        if (list != null) {
            for (Itemunbuf p : list) {
                if (p != null) {
                    // do stuff
                }
            }
        }
    }
}

如果您将totalAmount变量定义在此代码范围之外,并在我有// do stuff注释的地方递增,您将获得值{{1}中包含的所有Itemunbuf对象的总和}