【问题标题】:How can add integer elements inside a List?如何在 List 中添加整数元素?
【发布时间】:2015-01-30 14:03:39
【问题描述】:

我有一个作为查询结果生成的整数列表,我想在该数组中添加这些元素是否可能?

List<Objects[]> list = EnquiryService.getQuantityById(60);

我得到的名单是list=[4,5,6]

如何在列表中添加元素?

【问题讨论】:

  • 您想要列表中元素的总和?
  • 是的,我想要总和@Takendarkk
  • 你知道如何迭代列表吗?像 for 循环或 for-each 循环一样?
  • 我假设元素将在 Object[] 中,因此您仍然可以使用 for-each 循环并强制转换为 int(如果您确定它们只是整数)
  • 这个问题有问题。您谈论的是整数列表,但在您的代码中,您有一个对象数组列表。请编辑您的问题以明确您的意思。

标签: java arrays list java-7


【解决方案1】:

通过将元素转换为 int 来添加元素。确保您的数组仅包含 Integer 对象。你可以使用(int)object从java 7进行转换

BigDecimal sum = new BigDecimal(0);
for(Object o:list){
   sum.add((BigDecimal)o);
}
int sumation=sum.intValueExact();

【讨论】:

  • java.lang.ClassCastException: java.math.BigDecimal 不能转换为 java.lang.Integer
  • 使用 yourdecimal.intValueExact() 获取整数值
【解决方案2】:

尝试使用 Java 8 流对 List&lt;Object[]&gt; 求和:

BinaryOperator<Integer> integerAdder = (i, j) -> i + j;

Function<Object[], Integer> sumListOfObjects = oa -> Arrays.asList(oa)
        .stream()
        .map(o -> (Integer) o)
        .reduce(0, integerAdder);

List<Object[]> listOfObjectArrays = Arrays.asList(new Integer[]{1, 2, 3},
                                                  new Integer[]{4, 5, 6});

int total = listOfObjectArrays
        .stream()
        .map(sumListOfObjects)
        .reduce(0, integerAdder);

输出:

21

【讨论】:

  • List 类型的方法 stream() 未定义
  • 您使用的是什么 Java 版本?
  • 你应该切换到 Java 8。
【解决方案3】:

我建议为您的数据创建一个“持有者”。

List<DataHolder> list = DataHolder.getFromListOfLists(EnquiryService.getQuantityById(60));

然后您可以在每个持有人上致电getTotal()

public static class DataHolder {

    Object [] list;

    private int total;

    public DataHolder(Object[] list) {
        this.list = list;
        this.total = 0;

        //Sum the totals
        for (Object o:list) 
            if (o != null)
                total += (Integer)o;
    }

    //Total getter
    public int getTotal() {
        return this.total;
    }

    public static List<DataHolder> getFromListOfLists(List<Object[]> lists) {
        List<DataHolder> holders = new ArrayList<>();
        for (Object[] list:lists) {
            holders.add(new DataHolder(list));
        }
        return holders;
    }
}

打印总数:

for (DataHolder holder:lists)
    System.out.println(holder.getTotal());

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多