赞
踩
简单的排序一般用一个sorted就行
list = list.stream().sorted(Comparator.comparing(TestSort::getState)).collect(Collectors.toList());
再稍微多一个字段,说不定加一个.thenComparing(TestSort::getCode).reversed()也能实现需求
- //reversed()倒序排列,默认都是从小到大排序,加上reversed实现倒序
-
- list = list.stream().sorted(Comparator.comparing(TestSort::getState)
- .thenComparing(TestSort::getCode).reversed()).collect(Collectors.toList());
但有一些稍微复杂的,存在逻辑的判断,就需要自定义排序。
比如根据多个字段比较排序,根据指定的中文排序,等等。都可以用Collections.sort,重写compare方法。
可以自己先通过一个小demo理解一下compare返回值,多考虑各种情况,排序需求基本都能实现。
需求:把state为3、5的值置顶后,根据code排序。
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.List;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
-
- /**
- * @author ZoeySir
- */
- public class TestSort {
-
- private int code;
- private int state;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public int getState() {
- return state;
- }
-
- public void setState(int state) {
- this.state = state;
- }
-
- public TestSort(int code, int state) {
- this.code = code;
- this.state = state;
- }
-
- public static void main(String[] args) {
- TestSort s1 = new TestSort(2, 5);
- TestSort s2 = new TestSort(4, 1);
- TestSort s3 = new TestSort(5, 2);
- TestSort s4 = new TestSort(3, 3);
- TestSort s5 = new TestSort(1, 2);
- List<TestSort> sortList = Stream.of( s1,s4, s2,s5,s3).collect(Collectors.toList());
- //自定义对象字段排序
- //需求:把state为3、5的值置顶后,根据code排序
- Collections.sort(sortList, new Comparator<TestSort>() {
- /**
- * 两个对象做比较,自定义排序
- */
- @Override
- public int compare(TestSort o1, TestSort o2) {
- //返回值解释:返回值为-1 、0、1
- //-1代表左边小于右边,即o1 < o2
- //0代表相等,即o1 = o2
- //1代表左边大于右边,即o1 > o2
-
- if (o1.getState() == 3 || o1.getState() == 5 ){
- if (o1.getCode() > o2.getCode()){
- return 1;
- }
- return -1;
- }
- if (o2.getState() == 3 || o2.getState() == 5){
- return 1;
- }
- if (o1.getCode() < o2.getCode()){
- return -1;
- }
- if (o1.getCode() > o2.getCode()){
- return 1;
- }
- return 0;
- }
- });
- for (TestSort t : sortList) {
- System.out.println(t.getCode() + "===" + t.getState());
- }
- }
- }
输出:
perfect~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。