如何获取LinkedList的总和(在LinkedList中汇总项目)

时间:2014-06-08 01:26:55

标签: java collections

我想要做的是获取从数据库中检索的所有整数项的总和,然后将其添加到LinkedList中,如下所示:

ManageFeeNotePOJO selectedRecord = (ManageFeeNotePOJO) manageFeeNoteListTableView().getItems().get(selectdIndex);
List toFeeBillListTot = new LinkedList();
toFeeBillListTot.add(selectedRecord.getFeeNoteValue());

int sum = 0;
for (Object sumItem : toFeeBillListTot) {
    sum += sumItem;
}
System.out.println(sum);

有了这个,我得到了错误:

bad operand types for binary operator '+'
first type:  int
second type: Object

另一种方法是:

ManageFeeNotePOJO selectedRecord = (ManageFeeNotePOJO) manageFeeNoteListTableView().getItems().get(selectdIndex);
List toFeeBillListTot = new LinkedList();
toFeeBillListTot.add(selectedRecord.getFeeNoteValue());

int sum = 0;
for (int i = 0; i < toFeeBillListTot.size(); i++) {
    sum += (int) toFeeBillListTot.get(i);
}
System.out.println(sum);

我的错误java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

拜托,对于任何有关此问题的工作方法,我都会非常满意。提前谢谢。

2 个答案:

答案 0 :(得分:1)

首先,我对使用List声明使用原始类型感到有点奇怪。这样,我的意思是你不提供类型参数。

如果您期望获得String的列表,那么您应该如此声明:

List<String> toFeeBillListTot = new LinkedList<>();

接下来,您不能简单地添加String,因为这没有任何意义。您必须将它们全部转换为某种数字类型,可能是Double

double sum = 0;
for(String bill : toFeeBillListTot) {
    sum += Double.parseDouble(bill);
}

并非上述转化仅在转化中没有任何其他异常字符时才有效(即没有千位分隔符)。

答案 1 :(得分:1)

bad operand types for binary operator '+'
first type:  int
second type: Object

这就是说:&#34;你不能将+运营商与这两种类型的运营商一起使用&#34; - 我打赌你可以猜出哪一个 - Object - 如果你想的话,哪个有意义:

请记住,您在Java中使用的每种类型的每个类都会扩展Object。因此,当您使用已转换为Object的内容时,Java几乎不知道该内容是什么。特别是,对于应用于+的{​​{1}},如何处理没有吓人的线索

例如,假设你有一个Person类并且做了

 Person a = new Person();
 Person b = new Person();
 a + b; //WTF?? 

那会有意义吗?当然不是。

现在,您可能会说&#34;但我没有将对象添加到我的列表中,我添加了整数/双打/其他类型的+运算符应该使用&#34; - 我确定你是对的,但 问题在于你将它们添加到对象列表 ,你就是这样创建的:

List sum toFeeBillListTot = new LinkedList();

执行此操作时,您将创建一个&#34;无类型列表&#34;。这意味着您可以添加您喜欢的任何类型的对象 - 这可能听起来不错,但作为一个自然结果,您只能从中检索Object,这就是您现在正在做的事情。

通过&#34;使用通用集合&#34;,@ Jeroen建议您这样做:

List<Integer> toFeeBillListTot = new LinkedList<>();

<Integer>表示您正在创建整数列表,而不是创建对象列表,这意味着您只能向其中添加Integer s而且你从中拉出的每一个元素都是一个整数,所以你可以这样做:

int sum = 0;
for (Integer sumItem : toFeeBillListTot) {
  sum += sumItem;
}