[英]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.