最近在用不太熟悉的 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 大神,这种逻辑有没有简洁的实现方法呢?
