Index: commons/src/main/java/org/apache/hama/commons/math/DenseDoubleVector.java =================================================================== --- commons/src/main/java/org/apache/hama/commons/math/DenseDoubleVector.java (revision 1575659) +++ commons/src/main/java/org/apache/hama/commons/math/DenseDoubleVector.java (working copy) @@ -501,8 +501,8 @@ * @see de.jungblut.math.DoubleVector#iterateNonZero() */ @Override - public Iterator iterateNonZero() { - return new NonZeroIterator(); + public Iterator iterateNonDefault() { + return new NonDefaultIterator(); } /* @@ -544,21 +544,24 @@ } /** - * Non-zero iterator for vector elements. + * Non-default iterator for vector elements. */ - private final class NonZeroIterator extends + private final class NonDefaultIterator extends AbstractIterator { private final DoubleVectorElement element = new DoubleVectorElement(); private final double[] array; private int currentIndex = 0; - private NonZeroIterator() { + private NonDefaultIterator() { this.array = vector; } @Override protected final DoubleVectorElement computeNext() { + if (currentIndex >= array.length) { + return endOfData(); + } while (array[currentIndex] == 0.0d) { currentIndex++; if (currentIndex >= array.length) @@ -566,6 +569,7 @@ } element.setIndex(currentIndex); element.setValue(array[currentIndex]); + ++currentIndex; return element; } } Index: commons/src/main/java/org/apache/hama/commons/math/DoubleVector.java =================================================================== --- commons/src/main/java/org/apache/hama/commons/math/DoubleVector.java (revision 1575659) +++ commons/src/main/java/org/apache/hama/commons/math/DoubleVector.java (working copy) @@ -300,9 +300,9 @@ public DoubleVector deepCopy(); /** - * @return an iterator that only iterates over non zero elements. + * @return an iterator that only iterates over non default elements. */ - public Iterator iterateNonZero(); + public Iterator iterateNonDefault(); /** * @return an iterator that iterates over all elements. Index: commons/src/main/java/org/apache/hama/commons/math/NamedDoubleVector.java =================================================================== --- commons/src/main/java/org/apache/hama/commons/math/NamedDoubleVector.java (revision 1575659) +++ commons/src/main/java/org/apache/hama/commons/math/NamedDoubleVector.java (working copy) @@ -202,8 +202,8 @@ } @Override - public Iterator iterateNonZero() { - return vector.iterateNonZero(); + public Iterator iterateNonDefault() { + return vector.iterateNonDefault(); } @Override Index: commons/src/test/java/org/apache/hama/commons/math/TestDenseDoubleVector.java =================================================================== --- commons/src/test/java/org/apache/hama/commons/math/TestDenseDoubleVector.java (revision 1575659) +++ commons/src/test/java/org/apache/hama/commons/math/TestDenseDoubleVector.java (working copy) @@ -20,6 +20,10 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import java.util.Iterator; + +import org.apache.hama.commons.math.DoubleVector.DoubleVectorElement; +import org.junit.Ignore; import org.junit.Test; /** @@ -205,4 +209,34 @@ }); vec.multiply(mat); } + + @Test(timeout=100) + public void testIterator() { + double[] expectedRes = new double[] {38, 44, 50, 56, 0, 0, 3, 0, 0, 0}; + DoubleVector vec = new DenseDoubleVector(expectedRes); + Iterator itr = vec.iterate(); + + int curIdx = 0; + while (itr.hasNext()) { + DoubleVectorElement elem = itr.next(); + assertEquals(curIdx, elem.getIndex()); + assertEquals(expectedRes[curIdx++], elem.getValue(), 0.000001); + } + + Iterator itrNonZero = vec.iterateNonDefault(); + + curIdx = 0; + while (itrNonZero.hasNext()) { + while (expectedRes[curIdx] == 0.0) { + ++curIdx; + } + assertEquals(expectedRes[curIdx++], itrNonZero.next().getValue(), 0.000001); + } + + } + + @Test + public void testApplyMethod() { + + } }