激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Java教程 - 基于Comparator對象集合實現多個條件按照優先級的比較

基于Comparator對象集合實現多個條件按照優先級的比較

2021-10-06 01:24CoderYin Java教程

這篇文章主要介紹了基于Comparator對象集合實現多個條件按照優先級的比較,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、背景介紹

在日常的java開發中,我們在返回一個對象集合時需要按照對象的某個屬性或者某些屬性進行排序返回給前端進行展示,例如我最近需要返回一個題庫集合,需要先根據指定時間排序然后根據創建時間進行排序,在mysql層進行操作比較麻煩而且浪費時間,我們可以通過程序來進行排序。

二、案例代碼

// 實體類
public class People {
	private Integer id;
	private String name;
	private Integer topTime;// 置頂時間
	private Integer gmtCreate;// 創建時間 
	public People(Integer id, String name, Integer topTime, Integer gmtCreate) {
		super();
		this.id = id;
		this.name = name;
		this.topTime = topTime;
		this.gmtCreate = gmtCreate;
	}
 
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getTopTime() {
		return topTime;
	}
	public void setTopTime(Integer topTime) {
		this.topTime = topTime;
	}
	public Integer getGmtCreate() {
		return gmtCreate;
	}
	public void setGmtCreate(Integer gmtCreate) {
		this.gmtCreate = gmtCreate;
	}
 
	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + ", topTime=" + topTime + ", gmtCreate=" + gmtCreate + "]";
	}
}
// 排序方法
public class PeopleComparator implements Comparator<People>{
 
	@Override
	public int compare(People o1, People o2) {
		int result = 0;
		// 按照置頂時間排序升序(o1,o2位置互換就是降序)
		int topTimeSeq = o2.getTopTime() - o1.getTopTime();
		if(topTimeSeq != 0){
			result = (topTimeSeq > 0) ? 3 : -1;
		}else{
			// 按照創建時間排序
			topTimeSeq = o2.getGmtCreate() - o1.getGmtCreate();
			if(topTimeSeq != 0){
				result = (topTimeSeq > 0) ? 2 : -2;
			}
		}
		return result;
	}
}
// 測試
public class PeopleTest {
	public static void main(String[] args) {
		List<People> peopleList = new ArrayList<People>(){
			{
				add(new People(1,"tom1",0,1));
				add(new People(2,"tom2",2,4));
				add(new People(3,"tom3",1,3));
				add(new People(4,"tom4",0,6));
				add(new People(5,"tom5",0,2));
				add(new People(6,"tom6",0,5));
			}
		};
		Collections.sort(peopleList,new PeopleComparator());
		for(People p:peopleList){
			System.out.println(p.toString());
		}
	}
}

測試結果

基于Comparator對象集合實現多個條件按照優先級的比較

Comparator 多條件比較

class Card {
    int a;
    int b;
    public Card(int a, int b) {
        this.a = a;
        this.b = b;
    }
    public int getA() {
        return a;
    }
    public int getB() {
        return b;
    }
    @Override
    public String toString() {
        return "Card{" +
                "a=" + a +
                ", b=" + b +
                "}";
    }
}
public class Main {
    public static void main(String[] args) {
        List<Card> list = new ArrayList<>();
        list.add(new Card(0, 2));
        list.add(new Card(1, 1));
        list.add(new Card(1, 0));
        list.add(new Card(1, 0));
        list.add(new Card(2, 0));
        System.out.println(list);
        System.out.println();
        
        Collections.sort(list, new Comparator<Card>() {
            @Override
            public int compare(Card c1, Card c2) {
                // c1 - c2  升序
                // c2 - c1  降序
                int res1 = c2.b - c1.b;
                int res2 = c2.a - c1.a;
                // 當 b相等時比較a, 否則先比較b
                return res1 == 0 ? res2 : res1;
            }
        });
        System.out.println(list);
    }
}
[Card{a=0, b=2}, Card{a=1, b=1}, Card{a=1, b=0}, Card{a=1, b=0}, Card{a=2, b=0}]
[Card{a=0, b=2}, Card{a=1, b=1}, Card{a=2, b=0}, Card{a=1, b=0}, Card{a=1, b=0}]

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/CoderYin/article/details/96994291

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 久久久综合视频 | 亚洲免费视频大全 | 女人一级一级毛片 | 91精品国产综合久久婷婷香 | 中国免费一级毛片 | 亚洲成人精品国产 | 美国黄色小视频 | 手机免费看一级片 | 亚洲精品久久久久www | 久久久久久久高清 | 国产成人在线网站 | 亚洲人成在线播放网站 | 成人毛片100部免费观看 | 成人福利电影在线观看 | 97中文字幕第一一一页 | 99热久草 | 26uuu成人人网图片 | 黄色高清免费 | 色婷婷一区二区三区 | 欧美日韩亚洲国产精品 | 毛片免费在线播放 | 欧美一级黄视频 | 亚洲免费片 | 国产精品一区二区三区在线 | 香蕉视频18 | 久草在线综合 | 国产精品成人一区二区三区电影毛片 | 男男羞羞视频网站国产 | 国产成人在线一区 | 成人福利电影在线观看 | 亚洲欧美国产高清va在线播放 | 欧美成人一二区 | 91av在线免费播放 | 精品久久久一二三区播放播放播放视频 | 午色影院 | 国产噜噜噜 | 一级毛片手机在线观看 | 91成人免费| 国产精品区一区二区三区 | 韩国一大片a毛片 | 黄色大片网站在线观看 |