如何对Java ArrayList按多个字段排序,相同首字母按次字母排序
代码修改方案
你只需要调整Comparator的compare逻辑:先判断firstLetter的比较结果,若结果不为0(即两个元素的首字母不相等)直接返回该结果,若结果为0再返回secondLetter的比较结果即可。
兼容Java 8之前版本的写法(和原有写法风格一致)
Collections.sort(itemList, new Comparator<Item>() { @Override public int compare(Item o1, Item o2) { // 先比较firstLetter int firstCompare = Character.compare(o1.getFirstLetter(), o2.getFirstLetter()); if (firstCompare != 0) { return firstCompare; } // firstLetter相同的情况下再比较secondLetter return Character.compare(o1.getSecondLetter(), o2.getSecondLetter()); } });
Java 8及以上更简洁的链式写法
如果你的项目使用Java 8及更高版本,还可以用Comparator的静态方法链式调用,代码更简洁易读:
itemList.sort(Comparator.comparing(Item::getFirstLetter) .thenComparing(Item::getSecondLetter));
内容的提问来源于stack exchange,提问作者Red Knight
相关产品推荐
相关产品推荐

