国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 實現Comparable接口排序,升序、降序、倒敘

java 實現Comparable接口排序,升序、降序、倒敘

2020-08-19 17:28256g的胃 Java教程

這篇文章主要介紹了java 實現Comparable接口排序,升序、降序、倒敘,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

本人由于項目開發中需要對查詢結果list進行排序,這里根據的是每一個對象中的創建時間降序排序。本人講解不深,只實現目的,如需理解原理還需查閱更深的資料。

1.實現的效果

java 實現Comparable接口排序,升序、降序、倒敘

2.創建排序的對象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.practice.test.comparable;
import java.util.Date;
 
/**
 * 描述:要比較的對象
 *
 * @author cui
 * @create 2018-12-18 14:07
 */
public class MySortBean implements Comparable<MySortBean> {
  private String name;
  private int age;
  private Date createTime;
 
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public int getAge() {
    return age;
  }
 
  public void setAge(int age) {
    this.age = age;
  }
 
  public Date getCreateTime() {
    return createTime;
  }
 
  public void setCreateTime(Date createTime) {
    this.createTime = createTime;
  }
 
//  @Override
//  public int compareTo(MySortBean o) {
//    if (this.age>o.age){
//      return -1;
//    }else if (this.age==o.age){
//      return 0;
//    }
//    return 1;
//  }
    @Override
    public int compareTo(MySortBean o) {
      if (this.createTime.compareTo(o.getCreateTime())>0){
        return -1;
      }else if (this.createTime.compareTo(o.getCreateTime())==0){
        return 0;
      }
      return 1;
    }
 
  @Override
  public String toString() {
    return "MySortBean{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
  }
}

3.編寫test方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.practice.test;
import com.practice.test.comparable.MySortBean;
import com.spring.testlist.util.DateUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
 * 描述:
 * 測試比較器
 *
 * @author cui
 * @create 2018-12-18 14:10
 */
@RunWith(SpringJUnit4ClassRunner.class)
public class TestCompare {
 
  @Test
  public void testComparable(){
    MySortBean m1 = new MySortBean();
    m1.setAge(1);
    m1.setCreateTime(DateUtil.parseDate("2019-01-21 16:13:18"));
    MySortBean m2 = new MySortBean();
    m2.setAge(2);
    m2.setCreateTime(DateUtil.parseDate("2019-01-23 16:13:18"));
    MySortBean m3 = new MySortBean();
    m3.setAge(3);
    m3.setCreateTime(DateUtil.parseDate("2019-01-22 16:13:18"));
    MySortBean m4 = new MySortBean();
    m4.setAge(4);
    m4.setCreateTime(DateUtil.parseDate("2019-01-24 16:13:18"));
    MySortBean m5 = new MySortBean();
    m5.setAge(5);
    m5.setCreateTime(DateUtil.parseDate("2019-01-25 16:13:18"));
    List<MySortBean> l = new ArrayList<>(5);
    l.add(m1);
    l.add(m2);
    l.add(m4);
    l.add(m5);
    l.add(m3);
 
    System.out.println("排序前:");
    for (MySortBean i:l) {
      System.out.println(DateUtil.formatDate(i.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
    }
    /**
     * 自定義排序
     * 直接return -1 倒敘排列,list順序顛倒輸出
     *
     * if (o1.getAge()>o2.getAge()){
     *           return 1;
     *         }
     *         return -1;
     *         以上升序輸出
     *
     * if (o1.getAge()>o2.getAge()){
     *           return -1;
     *         }
     *         return 1;
     *         以上降序輸出
     *
     *
     */
/*    Comparator<MySortBean> comparator = new Comparator<MySortBean>() {
      @Override
      public int compare(MySortBean o1,MySortBean o2) {
        if (o1.getAge()>o2.getAge()){
          return -1;
        }
        return 1;
      }
    };
    l.sort(comparator);*/
    l.sort(MySortBean::compareTo);
    System.out.println("--------");
    System.out.println("排序后:");
    for (MySortBean i:l) {
      System.out.println(DateUtil.formatDate(i.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
    }
  }
}

4.時間格式化工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
package com.spring.testlist.util;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
/**
 * 日期工具類, 繼承org.apache.commons.lang.time.DateUtils類
 *
 * @author cui
 * @create 2018-10-26 15:30
 **/
public class DateUtil extends org.apache.commons.lang3.time.DateUtils{
 
    private static String[] parsePatterns = {
        "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
        "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
        "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
    /**
     * 得到當前日期字符串 格式(yyyy-MM-dd)
     */
    public static String getDate() {
      return getDate("yyyy-MM-dd");
    }
  /**
   * 得到當前日期字符串 格式(yyyyMMdd)
   */
  public static String getSizeDate() {
    return getDate("yyyyMMdd");
  }
 
    /**
     * 得到當前日期字符串 格式(yyyy-MM-dd) pattern可以為:"yyyy-MM-dd" "HH:mm:ss" "E"
     */
    public static String getDate(String pattern) {
      return DateFormatUtils.format(new Date(), pattern);
    }
 
    /**
     * 得到日期字符串 默認格式(yyyy-MM-dd) pattern可以為:"yyyy-MM-dd" "HH:mm:ss" "E"
     */
    public static String formatDate(Date date, Object... pattern) {
      if (date == null) {
        return null;
      }
      String formatDate = null;
      if (pattern != null && pattern.length > 0) {
        formatDate = DateFormatUtils.format(date, pattern[0].toString());
      } else {
        formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
      }
      return formatDate;
    }
 
    /**
     * 得到日期時間字符串,轉換格式(yyyy-MM-dd HH:mm:ss)
     */
    public static String formatDateTime(Date date) {
      return formatDate(date, "yyyy-MM-dd HH:mm:ss");
    }
 
    /**
     * 得到當前時間字符串 格式(HH:mm:ss)
     */
    public static String getTime() {
      return formatDate(new Date(), "HH:mm:ss");
    }
 
    /**
     * 得到當前日期和時間字符串 格式(yyyy-MM-dd HH:mm:ss)
     */
    public static String getDateTime() {
      return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }
 
    /**
     * 得到當前年份字符串 格式(yyyy)
     */
    public static String getYear() {
      return formatDate(new Date(), "yyyy");
    }
 
    /**
     * 得到當前月份字符串 格式(MM)
     */
    public static String getMonth() {
      return formatDate(new Date(), "MM");
    }
 
    /**
     * 得到當天字符串 格式(dd)
     */
    public static String getDay() {
      return formatDate(new Date(), "dd");
    }
 
    /**
     * 得到當前星期字符串 格式(E)星期幾
     */
    public static String getWeek() {
      return formatDate(new Date(), "E");
    }
 
    /**
     * 日期型字符串轉化為日期 格式
     * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
     * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
     * "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
     */
    public static Date parseDate(Object str) {
      if (str == null) {
        return null;
      }
      try {
        return parseDate(str.toString(), parsePatterns);
      } catch (ParseException e) {
        return null;
      }
    }
    /**
     * 獲取過去的天數
     *
     * @param date
     * @return
     */
    public static long pastDays(Date date) {
 
      long t = System.currentTimeMillis()- date.getTime();
      return t / (24 * 60 * 60 * 1000);
    }
    /**
     * 獲取過去的小時
     *
     * @param date
     * @return
     */
    public static long pastHour(Date date) {
      long t =System.currentTimeMillis() - date.getTime();
      return t / (60 * 60 * 1000);
    }
    /**
     * 獲取過去的分鐘
     *
     * @param date
     * @return
     */
    public static long pastMinutes(Date date) {
      long t = System.currentTimeMillis() - date.getTime();
      return t / (60 * 1000);
    }
    /**
     * 轉換為時間(天,時:分:秒.毫秒)
     *
     * @param timeMillis
     * @return
     */
    public static String formatDateTime(long timeMillis) {
      long day = timeMillis / (24 * 60 * 60 * 1000);
      long hour = (timeMillis / (60 * 60 * 1000) - day * 24);
      long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);
      long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
      long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
      return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;
    }
    /**
     * 獲取兩個日期之間的天數
     *
     * @param before
     * @param after
     * @return
     */
    public static double getDistanceOfTwoDate(Date before, Date after) {
      long beforeTime = before.getTime();
      long afterTime = after.getTime();
      return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
    }
    public static String getFirstDayOfMonth() {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      //獲取當前月第一天:
      Calendar c = Calendar.getInstance();
      c.add(Calendar.MONTH, 0);
      c.set(Calendar.DAY_OF_MONTH, 1);//設置為1號,當前日期既為本月第一天
      String first = format.format(c.getTime());
      return first;
    }
    /**
     * @param args
     * @throws ParseException
     */
    public static void main(String[] args) throws ParseException {
// System.out.println(formatDate(parseDate("2010/3/6")));
// System.out.println(getDate("yyyy年MM月dd日 E"));
// long time = new Date().getTime()-parseDate("2012-11-19").getTime();
// System.out.println(time/(24*60*60*1000));
      String sizeDate = formatDate(new Date(),"yyyyMMdd");
      System.out.println(sizeDate);
    }
}

到此就結束了,具體的要實現什么排序,根據示例自己腦補擴展就好了,例子中備注也已經標注。

在使用排序注意兩個坑

1.要排序的字段為空的異常處理

2.要排序的字段相等的異常處理

補充知識:Java中的自然排序和比較器排序

寫在前面的話:剛開始學習著兩者排序時我也是一頭霧水,雖然能寫出來但是稀里糊涂,幾時該用哪個排序一點想法都沒有,后來經過研究這兩者的作用點不同,自然排序作用在實體類上,而比較器排序作用在裝實體類的集合上。

1、自然排序:java.lang.Comparable

Comparable 接口中只提供了一個方法: compareTo(Object obj) ,該方法的返回值是 int 。如果返回值為正數,則表示當前對象(調用該方法的對象)比 obj 對象“大”;反之“小”;如果為零的話,則表示兩對象相等。

總結為一句話:實現Comparable,重寫 compareTo方法

案列:以TreeMap為例,默認的升序,可以重寫自然排序的方法改變原有排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public static void testComparable(){
    TreeMap<Car,Object> tmp = new TreeMap<Car,Object>();
    tmp.put(new Car(4), "肆");
    tmp.put(new Car(1), "壹");
    tmp.put(new Car(5), "伍");
    tmp.put(new Car(3), "三");
    tmp.put(new Car(2), "貳");
    System.out.println(tmp);
    //結果://{Car [price=5.0]=伍, Car [price=4.0]=肆, Car [price=3.0]=三, Car [price=2.0]=貳, Car [price=1.0]=壹}
  }
//自定義TreeMap排序方法  自然排序 
 
class Car implements Comparable<Car>{
  private double price;
  
  public double getPrice() {
    return price;
  }
 
  public void setPrice(double price) {
    this.price = price;
  }
 
  public Car(int price) {
    super();
    this.price = price;
  }
 
  @Override
  public int compareTo(Car o) {
    // TODO Auto-generated method stub
    if(this.price>o.getPrice()){
      return -1;//大的往前排
    }else if(this.price<o.getPrice()){
      return 1;//小的往后排
    }else{
      return 0;
    }
  }
 
  @Override
  public String toString() {
    return "Car [price=" + price + "]";
  }

2、比較器排序:java.util.Comparator

總結為一句話:實現Comparator 接口,重寫compare方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void testComparator(){
    //HashMap<Integer,Object> hm = new HashMap<Integer,Object>();
    TreeMap<Integer,Object> tmp = new TreeMap<Integer,Object>(new MyComparatorBigtoSmall());
    tmp.put(4, "肆");
    tmp.put(1, "壹");
    tmp.put(5, "伍");
    tmp.put(3, "三");
    tmp.put(2, "貳");
    //System.out.println(tmp);//默認排序結果:{1=壹, 2=貳, 3=三, 4=肆, 5=伍}
    System.out.println(tmp);//修改為比較器排序(升序){5=伍, 4=肆, 3=三, 2=貳, 1=壹}
  }
 
//自定義TreeMap排序方法  比較器排序 
  class MyComparatorBigtoSmall implements Comparator<Integer>{
 
    @Override
    public int compare(Integer o1, Integer o2) {
      // TODO Auto-generated method stub
      return o2-o1;
    }
  }

以上這篇java 實現Comparable接口排序,升序、降序、倒敘就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/C1041067258/article/details/86578188

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲国产欧美一区二区三区丁香婷 | 日韩精品久久 | 久久麻豆 | 国产精品无码久久久久 | 日韩视频在线观看 | 日韩国产| 成人a视频在线观看 | 婷婷激情久久 | 综合另类 | 国产精品久久久久久久久久免费 | 黄色av免费 | 国产亚洲精品美女久久久久久久久久 | 亚洲一区二区三区四区的 | 亚洲欧美综合精品久久成人 | 福利在线观看 | 国产精品久久久久无码av | 中文字幕视频二区 | 人人人射 | 久久久久久亚洲精品视频 | 欧美亚洲第一页 | 午夜精品视频在线观看 | 久久成人免费视频 | 欧美日韩精品在线 | 91网在线观看 | 国产一区久久 | 国产人免费人成免费视频 | 精品久久久久久久久久久 | 日韩精品小视频 | 国产高清av在线一区二区三区 | 日本 欧美 国产 | 中文字幕三区 | 可以在线观看的黄色 | 天堂8在线视频 | 亚洲国产精品久久久久秋霞蜜臀 | 国产欧美日韩一区二区三区 | 一区二区精品视频 | 艹逼网| 国产视频三区 | 欧美激情免费 | 亚洲成人精品在线 | 久久久久久久成人 |