Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查列表中的数字是否大于并延续到列表中的下一个数字_Java_List_Number Formatting - Fatal编程技术网

Java 如何检查列表中的数字是否大于并延续到列表中的下一个数字

Java 如何检查列表中的数字是否大于并延续到列表中的下一个数字,java,list,number-formatting,Java,List,Number Formatting,我在下面有一个包含startRange和endRange作为long的对象的示例列表。我想检查我的第一个元素endRange是否在下一个元素的startRange的延续中,并生成一个输出,如果数字在延续中,范围可以缩短。参见示例输出 样本输入- 起点:1005000,终点:1005799 起点:1005800,终点:1005899 起点:1005900,终点:1005999 起点:2096000,终点:2096999 起点:2097000,终点:2097999 起点:2205010,终点:22

我在下面有一个包含startRange和endRange作为long的对象的示例列表。我想检查我的第一个元素endRange是否在下一个元素的startRange的延续中,并生成一个输出,如果数字在延续中,范围可以缩短。参见示例输出

  • 样本输入-

    起点:1005000,终点:1005799
    起点:1005800,终点:1005899
    起点:1005900,终点:1005999
    起点:2096000,终点:2096999
    起点:2097000,终点:2097999
    起点:2205010,终点:2205019

  • 样本输出-

    起点:1005000,终点:1005999
    起点:2096000,终点:2097999
    起点:2205010,终点:2205019

这就是我尝试过的-

List finalRange=new ArrayList();
对于(BinRange bin:list.getBinRanges()){
rangeStart=bin.getRangeStart();
rangeEnd=bin.getRangeEnd();
System.out.println(“startRange:+rangeStart+”,endRange:+rangeEnd);
long diff=Math.abs(rangeEnd-rangeStart);
如果(差异==1){
继续;
}否则{
rangeEnd=bin.getRangeEnd();
BinRange BinRange=新的BinRange(rangeStart,rangeEnd);
最终范围添加(binRange);
打破
}
}

您可以连续成对地迭代它们,如下所示:

static List<BinRange> check(final List<BinRange> ranges)
{
    // trivial
    if (ranges.size() < 2)
    {
        return ranges;
    }
    var resultRanges = new ArrayList<BinRange>();
    Long prevStart = null;
    for (int i = 1, rangesSize = ranges.size(); i < rangesSize; i++)
    {
        final BinRange prevRange = ranges.get(i - 1);
        final BinRange currRange = ranges.get(i);

        if (prevStart == null)
        {
            prevStart = prevRange.getRangeStart();
        }

        if (prevRange.getRangeEnd() != currRange.getRangeStart() - 1)
        {
            resultRanges.add(prevStart == prevRange.getRangeStart()
                    ? prevRange  // recycle instance
                    : new BinRange(prevStart, prevRange.getRangeEnd()));
            prevStart = null;
        }
        if (i == rangesSize - 1)
        {
            resultRanges.add(prevStart == null
                    ? currRange // recycle instance
                    : new BinRange(prevStart, currRange.getRangeEnd()));
        }
    }
    return resultRanges;
}
静态列表检查(最终列表范围)
{
//琐碎的
if(ranges.size()<2)
{
返回范围;
}
var resultRanges=new ArrayList();
Long prevStart=null;
对于(inti=1,rangesize=ranges.size();i
谢谢@Vala。D.您的解决方案工作正常,但它不会将最后一条记录添加到列表中,该列表中没有任何进一步的startRange记录因lastRange值而增加。我会设法修复它并测试它。这比我试图打破循环并添加到列表中的内容要好。例如,使用这个输入-{“rangeStart”:“5000”,“rangeEnd”:“5799”},{“rangeStart”:“7000”,“rangeEnd”:“7499”},{“rangeStart”:“7500”,“rangeEnd”:“7999”},{“rangeStart”:“9000”,“rangeEnd”:“9600”}输出即将到来-{“rangeStart”:“5000”,“rangeEnd”:“5799”}{“rangeStart”:“7000”,“rangeEnd”:“7999”}啊,当然。我更新了它来考虑最后一个位置的不相交范围。如果你对我的回答有帮助,如果你能评估我的答案,那就太好了。