日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Comparator接口實(shí)現(xiàn)排序

 一本正經(jīng)地胡鬧 2019-09-04
Interface Comparator<T>

對(duì)任意類型集合對(duì)象進(jìn)行整體排序,排序時(shí)將此接口的實(shí)現(xiàn)傳遞給Collections.sort方法或者Arrays.sort方法排序.
實(shí)現(xiàn)int compare(T o1, T o2);方法,返回正數(shù),零,負(fù)數(shù)各代表大于,等于,小于。

單一條件排序:

舉例:

		List<Student> stus = new ArrayList<Student>(){
			{
				add(new Student("張三", 30));	
				add(new Student("李四", 20));	
				add(new Student("王五", 60));	
			}
		};
		//對(duì)users按年齡進(jìn)行排序
		Collections.sort(stus, new Comparator<Student>() {

			@Override
			public int compare(Student s1, Student s2) {
				// 升序
				//return s1.getAge()-s2.getAge();
				return s1.getAge().compareTo(s2.getAge());
				// 降序
				// return s2.getAge()-s1.getAge();
				// return s2.getAge().compareTo(s1.getAge());
			}
		});
		// 輸出結(jié)果
		...
		

注: 還可以使用lambda表達(dá)式簡(jiǎn)化代碼, 前提是JDK8開發(fā)環(huán)境, 如下:

		List<Student> stus = new ArrayList<Student>(){
			{
				add(new Student("張三", 30));	
				add(new Student("李四", 20));	
				add(new Student("王五", 60));	
			}
		};
		//對(duì)users按年齡進(jìn)行排序
		Collections.sort(stus, (s1,s2)->(s1.getAge()-s2.getAge()));

lambda表達(dá)式是JDK8新特性之一, 允許你通過(guò)表達(dá)式來(lái)代替功能接口; 細(xì)節(jié)請(qǐng)自行百度… 我也是剛接觸, 啊哈哈, 不熟悉,諒解諒解

多條件排序:

舉例:

		List<Student> stus = new ArrayList<Student>(){
			{
				add(new Student("張三", 30, 1));	
				add(new Student("李四", 20, 2));	
				add(new Student("王五", 40, 3));	
				add(new Student("趙六", 30, 4));	
				add(new Student("陳七", 40, 5));	
				add(new Student("周八", 20, 6));	
			}
		};
		Collections.sort(stus,new Comparator<Student>() {

			@Override
			public int compare(Student s1, Student s2) {
				int flag;
				// 首選按年齡升序排序
				flag = s1.getAge()-s2.getAge();
				if(flag==0){
					// 再按學(xué)號(hào)升序排序
					flag = s1.getNum()-s2.getNum();
				}
				return flag;
			}
		});
		
		System.out.println("年齡       學(xué)號(hào)       姓名  ");
		for(Student s : stus){
			System.out.println(s.getAge()+"   "+s.getNum()+"   "+s.getName());
		}

輸出結(jié)果:
這里寫圖片描述

自定義條件排序

		String[] order = {"語(yǔ)文","數(shù)學(xué)","英語(yǔ)","物理","化學(xué)","生物","政治","歷史","地理","總分"};
		final List<String> definedOrder = Arrays.asList(order);
		List<String> list = new ArrayList<String>(){
			{
				add("總分");
				add("英語(yǔ)");
				add("政治");
				add("總分");
				add("數(shù)學(xué)");
			}
		};
		Collections.sort(list,new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				int io1 = definedOrder .indexOf(o1);
				int io2 = definedOrder .indexOf(o2);
				return io1-io2;
			}
		});
		
		for(String s:list){
			System.out.print(s+"   ");
		}

使用lambda表達(dá)式簡(jiǎn)化代碼:

Collections.sort(list, (o1, o2)->(definedOrder .indexOf(o1)-definedOrder .indexOf(o2)));

輸出結(jié)果:
這里寫圖片描述

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多