我正在创建一个目录,我拥有的是产品编号到页面的映射。因此条目可能如下所示:
ABC123 => [59, 58, 57, 19, 36, 15, 33, 34, 13, 39, 11, 37, 38, 21, 20, 40, 63, 60, 45, 46, 22, 23, 24, 26, 3, 2, 10, 1, 7, 6, 5, 4, 8]
我想从中得到的是:
1-8,10,11,13,15,19-24,26,33,34,36-38,40,45,46,57-60
我当然可以编写这个代码,但我认为其他人已经解决了这个问题。我的谷歌搜索毫无结果。
一如既往地感谢您提供的任何帮助!
最佳答案
您可以将数字收集到排序集中,然后迭代这些数字。
快速而肮脏的例子:
SortedSet<Integer> numbers = new TreeSet<Integer>();
numbers.add( 1 );
numbers.add( 2 );
numbers.add( 3 );
numbers.add( 6 );
numbers.add( 7 );
numbers.add( 10 );
Integer start = null;
Integer end = null;
for( Integer num : numbers ) {
//initialize
if( start == null || end == null ) {
start = num;
end = num;
}
//next number in range
else if( end.equals( num - 1 ) ) {
end = num;
}
//there's a gap
else {
//range length 1
if( start.equals( end )) {
System.out.print(start + ",");
}
//range length 2
else if ( start.equals( end - 1 )) {
System.out.print(start + "," + end + ",");
}
//range lenth 2+
else {
System.out.print(start + "-" + end + ",");
}
start = num;
end = num;
}
}
if( start.equals( end )) {
System.out.print(start);
}
else if ( start.equals( end - 1 )) {
System.out.print(start + "," + end );
}
else {
System.out.print(start + "-" + end);
}
产量:1-3,6,7,10
关于java - 是否有一个 Java 库可以从数字列表中创建数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5744572/