作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Java,我想将一个 int
数组拆分为一个范围数组。比如数组
[1, 2, 3, 4, 5, 6, 7, 8, 100, 101, 102, 103]
会回来
[Range(1, 8), Range(100, 103)]
因为它由1到8和100到103组成
如果有一个库就最好了,但是这种转换的任何一种方法都可以。
最佳答案
好的 James,这是您的工作解决方案 :)
private void executeTestCode(){
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 100, 101, 102, 103};
Range[] ranges = Arrays.stream(getRanges(arr)).filter(r -> r != null).toArray(Range[]::new);
String output = Arrays.stream(ranges)
.map(Range::toString)
.reduce("[", (dynamicString, stringedRange) -> (dynamicString + stringedRange + ", "));
output = output.substring(0, output.length()-2) + "]";
System.out.println(output);
}
输出:
[范围(1, 8), 范围(100, 103)]
private Range[] getRanges(int[] toBeProcessed){
Range[] result = new Range[toBeProcessed.length]; //larger array won't be needed
int startRange = toBeProcessed[0];
int ranges = 0;
for(int a=0; a<toBeProcessed.length; a++){
try{
if(toBeProcessed[a] + 1 != toBeProcessed[a+1]){
result[ranges] = new Range(startRange, toBeProcessed[a]);
startRange = toBeProcessed[a+1];
ranges++;
}
}catch(ArrayIndexOutOfBoundsException e){
result[ranges] = new Range(startRange, toBeProcessed[toBeProcessed.length-1]);
}
}
return result;
}
类别范围:
class Range{
private int start, end;
public Range(int st, int en){
start = st;
end = en;
}
@Override
public String toString(){
return "Range(" +start+ ", " +end+ ")";
}
}
关于Java将数组拆分为范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414845/
我是一名优秀的程序员,十分优秀!