最近在用不太熟悉的 java 写点项目,有个需求需要把以“.”分隔的路径按照每个子路径的字典序排序,例如:
python:
arr = ["a.b.c", "a.b", "a.ab", "c"]
sorted(arr, key=lambda r: r.split("."))
输出: ['a.ab', 'a.b', 'a.b.c', 'c']
然而我用 java 实现却有点麻烦,我的实现是:
java:
arr.stream().map(key -> Tuple2.apply(key, key.split("\\.")))
.sorted((o1, o2) -> {
String[] parts1 = o1._2();
String[] parts2 = o2._2();
int maxLength = Math.max(parts1.length, parts2.length);
for (int i=0;i<maxLength;i++) {
if (i>=parts1.length) {
return -1;
} else if(i>=parts2.length) {
return 1;
}
int compareResult = parts1[i].compareTo(parts2[i]);
if (compareResult != 0) {
return compareResult;
}
}
return 0;
}).map(Tuple2::_1)
.collect(Collectors.toList());
不得不说这代码有点...丑
所以请教各位 java 大神,这种逻辑有没有简洁的实现方法呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.