一前言
阅读原文
前天公司有个同事有一个这样的一个需求,就是按照中文排序。看似很普通的需求,但是要实现的话,还是有一点点的困难,因为网上的例子不多,都是那种清一色的copy,答案都一样,只能应用于英文的排序。java8的流排序目前还没找到合适的方法。
这个写法也是公司的一个大佬对我说的,挺常见的需求,所以有必要记录一下下。
注意:数据库也有办法支持中文排序。我们这里只讲代码中如何实现。
二如何实现?两个排序。一个java8的流排序,一个是Comparator排序。
推荐Comparator排序!!!因为中文可以处理。
main测试类
public static void main(String[] args) throws Exception{ List arrayList = new ArrayList(); User user1 = new User("15.88","我"); User user2 = new User("15.88","擦"); User user3 = new User("15.88","嘻嘻"); User user4 = new User("15.88","看"); arrayList.add(user1);arrayList.add(user2);arrayList.add(user3);arrayList.add(user4); System.out.println(arrayList); /*java8排序*/ /*arrayList = arrayList.stream() .sorted( Comparator.comparing((User e) -> Double.valueOf(e.getScore())).reversed() .thenComparing((User e) -> e.getName()) ).collect(Collectors.toList()); System.out.println(arrayList);*/ /*分数倒序,名字正序*/ Comparator compareIns = Collator.getInstance(java.util.Locale.CHINA); arrayList.sort((o1, o2) -> { int perCom = Double.valueOf(o2.getScore()).compareTo(Double.valueOf(o1.getScore())); if (perCom == 0) { return compareIns.compare(o1.getName(), o2.getName()); } else { return perCom; } }); System.out.println(arrayList); }
User实体类
@Data@AllArgsConstructorpublic class User extends BaseVo{ private String score; private String name;}
点击下方阅读原文