小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

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

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

單一條件排序:

舉例:

		List<Student> stus = new ArrayList<Student>(){
			{
				add(new Student("張三", 30));	
				add(new Student("李四", 20));	
				add(new Student("王五", 60));	
			}
		};
		//對users按年齡進行排序
		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());
			}
		});
		// 輸出結果
		...
		

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

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

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

多條件排序:

舉例:

		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){
					// 再按學號升序排序
					flag = s1.getNum()-s2.getNum();
				}
				return flag;
			}
		});
		
		System.out.println("年齡       學號       姓名  ");
		for(Student s : stus){
			System.out.println(s.getAge()+"   "+s.getNum()+"   "+s.getName());
		}

輸出結果:
這里寫圖片描述

自定義條件排序

		String[] order = {"語文","數(shù)學","英語","物理","化學","生物","政治","歷史","地理","總分"};
		final List<String> definedOrder = Arrays.asList(order);
		List<String> list = new ArrayList<String>(){
			{
				add("總分");
				add("英語");
				add("政治");
				add("總分");
				add("數(shù)學");
			}
		};
		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表達式簡化代碼:

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

輸出結果:
這里寫圖片描述

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多