1. 整型(Integer)和字符串(String)类型的简单排序
这种列表数据的
可以使用以下的方法排序。
代码如下
package cn.qkongtao;/* *Created by tao on 2020-05-25. */ import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class ListSortDemo3 { public static void main(String[] args) { //对list升序排序 List<String> list = new ArrayList(); list.add("路飞"); list.add("索隆"); list.add("香吉士"); list.add("乔巴"); list.add("娜美"); System.out.println("========原始数据======="); for (String s : list) { System.out.println(s); } //升序 //是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法 Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA)); System.out.println("========升序排列======="); for (String s : list) { System.out.println(s); } //降序(要想实现根据的汉字的拼音的字母排序,应该先按上面升序,然后按下面降序) Collections.reverse(list); System.out.println("========降序排列======="); for (String s : list) { System.out.println(s); } } }
排序结果如下
可以看出是按照中文首字母的全拼进行排序的
2. 根据list中的对象Bean中的某个属性进行排序
当List
java8的新特性Lambda语法
代码如下
- Info.java(封装类)
package cn.qkongtao.domain;/* *Created by tao on 2020-05-25. */ public class Info { private String name; private Integer age; public Info() { super(); } public Info(String name, Integer age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "TestA [name=" + name + ", age=" + age + "]"; } }
- ListSortDemo1.java测试类
package cn.qkongtao;/* *Created by tao on 2020-05-25. */ import cn.qkongtao.domain.Info; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class ListSortDemo1 { public static void main(String[] args) { List<Info> users = new ArrayList<Info>(); Info user01 = new Info("张三", 18); Info user02 = new Info("李四", 12); Info user03 = new Info("王五", 26); Info user04 = new Info("赵六", 50); Info user05 = new Info("钱七", 37); /*Info user01 = new Info("zhangsan", 3); Info user02 = new Info("lisi", 1); Info user03 = new Info("wangwu", 2); Info user04 = new Info("zaoliu", 4); Info user05 = new Info("qianqi", 0); Info user06 = new Info("sunba", 9);*/ users.add(user01); users.add(user02); users.add(user03); users.add(user04); users.add(user05); //java8遍历 users.forEach(p -> System.out.println(p.getAge())); System.out.println("===排序前如下==="); users.stream().forEach(item -> System.out.println(item)); //根据年龄升序排序方式一 users.sort((a, b) -> a.getAge().compareTo(b.getAge())); System.out.println("===根据年龄升序排序后如下方式一==="); users.stream().forEach(item -> System.out.println(item)); //根据年龄倒序排序方式一 users.sort((a, b) -> b.getAge().compareTo(a.getAge())); System.out.println("===根据年龄降序排序后如下方式一==="); users.stream().forEach(item -> System.out.println(item)); //根据姓名升序排序(方式二简写) users.sort(Comparator.comparing(Info::getName)); System.out.println("===根据姓名升序排序后如下方式二==="); users.stream().forEach(item -> System.out.println(item)); //根据姓名降序排序(方式二简写) users.sort(Comparator.comparing(Info::getName).reversed()); System.out.println("===根据姓名降序排序后如下方式二==="); users.stream().forEach(item -> System.out.println(item)); //根据其中的某个对象的某个属性的值删除某个对象 /*System.out.print("删除前:"); users.stream().forEach(item -> System.out.print(item)); Iterator<Info> it = users.iterator(); while (it.hasNext()) { Info s = it.next(); if (s.getName().equals("李四")) { it.remove(); } } System.out.print("\n删除后:"); users.stream().forEach(item -> System.out.print(item));*/ } }
测试结果如下
结果表明:如果按照整型的属性来进行排序,结果时可行的,但是按照字符串(汉字)的属性来进行排序,似乎没有按照首字的全拼来排序,而是有另外的排序规则(我也不清楚)。如果是非汉字的字符串,就会根据字母进行排序。
JavaBean实现Comparable接口
实现接口的方法是,将排序的Collator替换成中文工具类
Collator collator = Collator.getInstance(java.util.Locale.CHINA);
代码如下
- Info.java(实现接口的JavaBean)
package cn.qkongtao.domain;/* *Created by tao on 2020-05-25. */ import java.text.Collator; import java.util.Comparator; public class Info implements Comparator<Info> { private String name; private Integer age; public Info(String name, Integer age) { super(); this.name = name; this.age = age; } public Info() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "TestA [name=" + name + ", age=" + age + "]"; } Collator collator = Collator.getInstance(java.util.Locale.CHINA); //重写compare方法 @Override public int compare(Info o1, Info o2) { return collator.compare(o1.getName(), o2.getName()); } }
- ListSortDemo4,java(测试方法)
package cn.qkongtao;/* *Created by tao on 2020-05-26. */ import cn.qkongtao.domain.Info; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ListSortDemo4 { public static void main(String[] args) { List<Info> users = new ArrayList<Info>(); Info user01 = new Info("张三", 18); Info user02 = new Info("李四", 12); Info user03 = new Info("王五", 26); Info user04 = new Info("赵六", 50); Info user05 = new Info("钱七", 37); Info user06 = new Info("乔巴", 37); users.add(user01); users.add(user02); users.add(user03); users.add(user04); users.add(user05); users.add(user06); System.out.println("========原始数据======="); for (Info user : users) { System.out.println(user); } System.out.println("========升序======="); Collections.sort(users, new Info()); for (Info user : users) { System.out.println(user); } System.out.println("========降序======="); Collections.reverse(users); for (Info user : users) { System.out.println(user); } } }
测试结果
最后一种方法而可以实现JavaBean复杂类型的List按某个字段首字的中文全拼进行排序。