如何检查列表中的数字是否大于列表中的下一个数字并继续
How to check if number in a list is greater than and in continuation to next number in list
下面是包含 startRange 和 endRange 的对象示例列表。我想检查我的第一个元素 endRange 是否延续到下一个元素中的 startRange 并生成一个输出,如果数字连续,则可以缩短范围。查看示例输出。
示例输入 -
开始范围:1005000,结束范围:1005799
开始范围:1005800,结束范围:1005899
开始范围:1005900,结束范围:1005999
起始范围:2096000,结束范围:2096999
起始范围:2097000,结束范围:2097999
起始范围:2205010,结束范围:2205019
示例输出 -
开始范围: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;
}
下面是包含 startRange 和 endRange 的对象示例列表。我想检查我的第一个元素 endRange 是否延续到下一个元素中的 startRange 并生成一个输出,如果数字连续,则可以缩短范围。查看示例输出。
示例输入 -
开始范围:1005000,结束范围:1005799
开始范围:1005800,结束范围:1005899
开始范围:1005900,结束范围:1005999
起始范围:2096000,结束范围:2096999
起始范围:2097000,结束范围:2097999
起始范围:2205010,结束范围:2205019示例输出 -
开始范围: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;
}