迭代地添加ArrayDeque中的所有元素

时间:2016-05-15 03:43:45

标签: java iteration deque

我有一个BigInts的arrayDeque,我实现的只是持有字符串IE BigInt@Instancewhatever = "3476234236734567"

我已经有一个方法可以将一个BigInt添加到另一个BigInt,它返回一个新的BigInt,其中包含两个BigInt之和的String。 IE

   BigInt@1 = "4321"
   BigInt@2 = "5555"
   BigInt@Sum = "9876"

我的问题是如何通过此Deque迭代并在BigInts上调用add。

我正在考虑在ArrayDeque的大小上使用forloop,但是ArrayDeque并不像普通的ArrayList那样真正具有x.get(x.size()-1)功能。

编辑:有关更多推断,这是我目前正在使用的内容。         digit是字符串IE的List格式         "1,2,3,4","5,5,5,5"

public BigInt times(BigInt operand){

    List<Integer> a = this.getDigit();
    List<Integer> b = operand.getDigit();
    //sum left unused atm
    List<Integer> sum = operand.getDigit();
    Deque<BigInt> temp = new ArrayDeque<>();
    Deque<BigInt> temp1 = new ArrayDeque<>();

    if(a.size() > b.size()){
        temp1 = multiply(a,b,temp);
        //Iterate here?

    } else {
        temp1 = multiply(b,a,temp);
        //Iterate here?
    }
    return new BigInt(temp1.toString());
}

2 个答案:

答案 0 :(得分:2)

ArrayDeque<T>实现Iterable<T>,因此您可以在其上使用for-each循环:

ArrayDeque<BigInt> deque = new ArrayDeque<BigInt>();
//populate deque

BigInt sum = new BigInt("0");
for(BigInt b : deque) {
    sum = sum.add(b);
}

//sum now holds the sum of the elements in deque.

这假定您的BigInt类有方法add(BigInt b)。你已经实现了它,或者你可能想要使用BigInteger,内置类用于大量的int。

总结deque中元素的更高级方法是使用流减少操作和方法引用:

ArrayDeque<BigInt> deque = new ArrayDeque<>();
//populate deque...

BigInteger sum = deque.stream().reduce(BigInt::add).orElseGet(() -> new BigInt("0")); 

答案 1 :(得分:1)

ArrayDeque实现了Iterable,因此您可以使用扩展的for循环:

BigInteger sum = BigInteger.ZERO;
for (BigInteger value : arrayDeque) {
  sum = sum.add(value);
}