如何将解析数字范围的Java方法转换为功能等价的Dart代码?
数字范围字符串解析Dart实现
以下是和原Java逻辑完全对齐的Dart实现代码:
class RangeParser { static void main(List<String> args) { String ranges = "1,2,3-6,4-5"; List<int> rangeList = getDistinctNumbers(ranges); print(rangeList); // 输出: [1, 2, 3, 4, 5, 6] } static List<int> getDistinctNumbers(String ranges) { return ranges .split(',') .map((s) => s.replaceAll(' ', '')) .map((rangeStr) => Range(rangeStr)) .expand((range) => range.render()) .toSet() .toList() ..sort(); } } class Range { late final int start; late final int stop; Range(String rangeStr) { final rangeArray = rangeStr.split('-'); final length = rangeArray.length; if (length < 1 || length > 2) { throw ArgumentError("Wrong number of arguments in a Range: $length"); } start = int.parse(rangeArray[0]); stop = length == 1 ? start : int.parse(rangeArray[1]); if (stop < start) { throw ArgumentError("Stop before start!"); } } List<int> render() { return List.generate(stop - start + 1, (index) => start + index); } }
实现说明
- 集合操作完全对应原Java逻辑:
split拆分字符串、replaceAll去除空格、expand对应Java的flatMap展开范围序列 - 用
toSet()实现去重,效果和Java Stream的distinct()一致 - 异常类型替换为Dart内置的
ArgumentError,报错提示和原实现完全相同 - 最终通过级联调用
sort()完成排序,返回去重后的有序整数列表
内容的提问来源于stack exchange,提问作者Mohammad Mirshahbazi
相关产品推荐
相关产品推荐

