我想将此方法转换为飞镖,有人可以帮忙吗?
import java.util.stream.Collectors;
public class RangeParser {
public static void main(String[] args) {
String ranges = "1,2,3-6,4-5";
List<Integer> rangeList = getDistinctNumbers(ranges);
System.out.println(rangeList);
}
public static List<Integer> getDistinctNumbers(String ranges) {
return Arrays.stream(ranges.split(","))
.map(s -> s.replace(" ", ""))
.map(Range::new)
.flatMap(range -> range.render().stream())
.distinct()
.sorted()
.collect(Collectors.toList());
}
private static class Range {
private int start;
private int stop;
public Range(String rangeStr) {
String[] rangeArray = rangeStr.split("-");
int length = rangeArray.length;
if (length < 1 || length > 2) {
throw new IllegalArgumentException("Wrong number of arguments in a Range: " + length);
}
start = Integer.parseInt(rangeArray[0]);
stop = (length == 1) ? start : Integer.parseInt(rangeArray[1]);
if (stop < start) {
throw new IllegalArgumentException("Stop before start!");
}
}
public List<Integer> render() {
List<Integer> pageList = new ArrayList<>(stop - start + 1);
for (Integer i = start; i < stop + 1; i++) {
pageList.add(i);
}
return pageList;
}
}
}
请试试这个
void main() {
String ranges = "1,2,3-6,4-5";
var list = ranges.split(",");
var elementList = [];
list.forEach((element) {
if (element.length > 2) {
elementList.addAll(getRange(int.parse(element.split("-").first),
int.parse(element.split("-").last)));
} else {
elementList.add(int.parse(element));
}
});
print(elementList.toSet().toList());
}
getRange(int first, int second) {
var rangeList = [];
for (var i = first; i <= second; i++) {
rangeList.add(i);
}
return rangeList;
}
输出:[1, 2, 3, 4, 5, 6]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句