937. 重新排列日志文件
自定义排序的比较方式。
比较时,先将字符串数组日志按照第一个空格分成两部分字符串,其中第一部分为标识符。第二部分的首字符可以用来判断该日志的类型。
class Solution {
public String[] reorderLogFiles(String[] logs) {
List l1 = new ArrayList<>(); // 存放字母日志
List l2 = new ArrayList<>(); // 存放数字日志
//遍历日志数组 logs
for (String log : logs) {
char c = log.charAt(log.length() - 1);
boolean isNum = Character.isDigit(c); // 判断每条log最后一个字符是否为数字
if (!isNum) {
l1.add(log);
} else {
l2.add(log);
}
}
// 对字母日志自定义排序:
Collections.sort(l1, (o1, o2) -> {
String s1 = o1.substring(o1.indexOf(' '));
String s2 = o2.substring(o2.indexOf(' '));
// 如果标识符相同,内容不同时,忽略标识符后,按内容字母顺序排序
if (s1.equals(s2)) {
return o1.compareTo(o2);
} else { // 否则,按标识符排序
return s1.compareTo(s2);
}
});
l1.addAll(l2); // 把数字日志的所有元素添加到l1
return l1.toArray(new String[0]);
}
}
其中涉及的方法:
- Character.isDigit( c ),其中c是字符,这个方法可以用于判断指定字符c是否为数字。如果字符为数字,则返回 true;否则返回 false。
- 为了节省空间同时获取返回值为String[]的数组,我们使用String[] array=list.toArray(new String[0]);
- IndexOf():查找字串中指定字符或字串首次出现的位置,返首索引值
详解java Collections.sort的两种用法
- 通过实现Comparator接口的compare方法来完成自定义排序
Collections.sort(list, new Comparator() { public int compare(String str1, String str2) { // 按首字母升序排 // return str1.compareTo(str2); // 按第二个字母升序排 char c1 = str1.charAt(1); char c2 = str2.charAt(1); return c1 - c2; } });



