Java 如何检查列表中的数字是否大于并延续到列表中的下一个数字
我在下面有一个包含startRange和endRange作为long的对象的示例列表。我想检查我的第一个元素endRange是否在下一个元素的startRange的延续中,并生成一个输出,如果数字在延续中,范围可以缩短。参见示例输出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
- 样本输入-
起点: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”}啊,当然。我更新了它来考虑最后一个位置的不相交范围。如果你对我的回答有帮助,如果你能评估我的答案,那就太好了。