简体   繁体   English

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

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

I have below a sample list of objects containing startRange and endRange as longs.我在下面有一个包含 startRange 和 endRange 的对象示例列表。 I want to check if my first element endRange is in continuation to startRange in the next element and generate an output where the range can be shortened if numbers are in continuation.我想检查我的第一个元素 endRange 是否延续到下一个元素中的 startRange 并生成一个 output 如果数字连续,则可以缩短范围。 See sample output.参见样品 output。

  • Sample Input -样本输入 -

    startRange: 1005000, endRange: 1005799开始范围:1005000,结束范围:1005799
    startRange: 1005800, endRange: 1005899开始范围:1005800,结束范围:1005899
    startRange: 1005900, endRange: 1005999开始范围:1005900,结束范围:1005999
    startRange: 2096000, endRange: 2096999开始范围:2096000,结束范围:2096999
    startRange: 2097000, endRange: 2097999开始范围:2097000,结束范围:2097999
    startRange: 2205010, endRange: 2205019开始范围:2205010,结束范围:2205019

  • Sample Output -样品 Output -

    startRange: 1005000, endRange: 1005999开始范围:1005000,结束范围:1005999
    startRange: 2096000, endRange: 2097999开始范围:2096000,结束范围:2097999
    startRange: 2205010, endRange: 2205019开始范围:2205010,结束范围:2205019

This is what I have tried -这是我尝试过的 -

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

You could iterate them in consecutive pairs as such:您可以像这样连续成对地迭代它们:

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.

相关问题 有没有一种更快的方法来检查列表中的某个项目是否大于,小于或等于某个数字? - Is there a faster way to check if an item in a list if it is greater than, less than, equal to a certain number? 如何检查一个数字的每个数字是否大于或等于另一个数字? - How to check every digit of a number is greater or equal than another number? 检查号码是否在号码列表中 - Check if number is in a number list 链接列表不包含大于特定数字的值 - Linked list doesn't contain values greater than a certain number 检查数字是否大于 1 的正则表达式 - Regular expression to check if number is greater than 1 我可以通过声纳Web服务API获得数量(或列表)复杂度大于一定数量的方法吗? - Can I get methods amount (or list) whose complexity are greater than a certain number by sonar web service API? 检查号码列表是否连续 - Check whether list of number is sequential or not 检查Java列表中是否有大于阈值的连续点 - Check if there are consecutive points in Java list greater than a threshold 如果数字在列表中出现多次,如何生成错误 - How to generate an error if a number appears more than once in a list 如何迭代比Java中列表大小指定的次数更多的次数 - how to iterate more number of times than size specified of list in java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM