簡體   English   中英

如何檢查列表中的數字是否大於並延續到列表中的下一個數字

[英]How to check if number in a list is greater than and in continuation to next number in list

我在下面有一個包含 startRange 和 endRange 的對象示例列表。 我想檢查我的第一個元素 endRange 是否延續到下一個元素中的 startRange 並生成一個 output 如果數字連續,則可以縮短范圍。 參見樣品 output。

  • 樣本輸入 -

    開始范圍:1005000,結束范圍:1005799
    開始范圍:1005800,結束范圍:1005899
    開始范圍:1005900,結束范圍:1005999
    開始范圍:2096000,結束范圍:2096999
    開始范圍:2097000,結束范圍:2097999
    開始范圍:2205010,結束范圍:2205019

  • 樣品 Output -

    開始范圍:1005000,結束范圍:1005999
    開始范圍:2096000,結束范圍:2097999
    開始范圍:2205010,結束范圍:2205019

這是我嘗試過的 -

List<BinRange> finalRange = new ArrayList<>();
for (BinRange bin : list.getBinRanges()) {
    rangeStart  = bin.getRangeStart();
    rangeEnd = bin.getRangeEnd();
    System.out.println("startRange : " + rangeStart + ", endRange : " + rangeEnd);
    long diff = Math.abs(rangeEnd - rangeStart);
    if (diff == 1) {
        continue;
    } else {
        rangeEnd = bin.getRangeEnd();
        BinRange binRange = new BinRange(rangeStart, rangeEnd);
        finalRange.add(binRange);
        break;
    }
}

您可以像這樣連續成對地迭代它們:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM