在Java中迭代SortedSet

时间:2016-06-29 10:58:21

标签: java sortedset

我正在尝试为存储在SortedSet中的双值创建间隔。

以下是我的代码:

Range array: [-Infinity - 1.0, 1.0 - 2.0, 11.0 - 12.0, 12.0 - Infinity]

我目前的输出是:

[-Infinity - 1.0, 1.0 - 2.0, 2.0 - 11.0, 11.0 - 12.0, 12.0 - Infinity]

我希望范围数组为:

{{1}}

3 个答案:

答案 0 :(得分:6)

在循环的每次迭代中消耗两个元素(如果元素的数量是奇数,则会抛出异常)。您应该在每次迭代中只使用一个:

    Iterator<Double> it = val.iterator();
    Double lowerBound = neginf;
    while (it.hasNext()) {
        // Get element
        Double upperBound = it.next();
        arr.add(lowerBound+" - "+upperBound);
        lowerBound = upperBound;
    }
    arr.add(lowerBound  + " - "+ posinf);

答案 1 :(得分:0)

每次it.next()调用都会一步向前转发迭代器。因此,在while循环的每次迭代中,您将松开一个间隔。使用临时变量来保留先前的迭代器值。

这样的东西
Iterator<Double> it = val.iterator();
Object end=null;
if(it.hasNext()){
    end= it.next();
    //write out -infinity to previous.
}
while(it.hasNext()){
    Object start = end;
    end= it.next();
    //write out start - end interval
}
if(end != null){
// write out end to infinity 
} else {
   // there were no values in the array.
   // write out - infinity to infinity?
}

答案 2 :(得分:0)

问题在于以下循环

while (it.hasNext()) {
    // Get element
    Object lowerBound = it.next();
    Object upperBound = it.next();
    arr.add(lowerBound+" - "+upperBound);
}

迭代器it在一次迭代中递增两次it.next(),最终导致你得到的数组。

解决方案如下:

Double lowerBound = neginf;
while (it.hasNext()) {
    // Get element
    Double upperBound = it.next();
    arr.add(lowerBound + " - "+ upperBound);
    lowerBound = upperBound;
}