1. 程式人生 > >自定義規則 Collections.sort() 對 List 排序

自定義規則 Collections.sort() 對 List 排序

二、Collections.sort()實現自定義排序

       Collections.sort()Arrays.sort()都可以實現自定義排序,我們經常會遇到如下的版本號:{"2","2.2","2.11","2.10.12","2.6.9.5","2.6.9.4"},如果我們使用Collections.sort()預設的方法進行排序,就會出現如下圖的結果:

這個的排序,很顯然不符合我們的要求,2.10.12應該排列在最後面,為了達到我們想要的效果,現在對Comparator()重寫:
package com.string;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CompareVersion {
	public static void main(String[] args) {
		/*準備資料集*/
		List<String> lists=Arrays.asList(new String []{"2","2.2","2.11","2.10.12","2.6.9.5","2.6.9.4"});
		System.out.println("==============重寫Comparator方法之前==================");
		Collections.sort(lists);
		System.out.println(lists);
		System.out.println("===================重寫Comparator方法之後===================");
		Collections.sort(lists,new Comparator<String>(){
			@Override//重寫compare方法,實現自定義排序
			public int compare(String str1, String str2) {
				String [] str1_items=null;
				String [] str2_items=null;
				//對傳入的string按一定的規則進行切分
				if(str1.contains(".")){
					str1_items=str1.split("\\.");
				}else{
					str1_items=new String []{str1};
				}
				if(str2.contains(".")){
					str2_items=str2.split("\\.");
				}else{
					str2_items=new String []{str2};
				}
				/*下面就是自定義排序的核心,reslut=0,1,-1  分別表示等於,大於,小於*/
				int result=0;
				if(str1_items.length ==str2_items.length){//兩個字串含有相同數量的    "."號
					for(int i=0;i<str1_items.length;i++){//迴圈進行比對
						if(Integer.parseInt(str1_items[i])!=Integer.parseInt(str2_items[i])){
							result=Integer.parseInt(str1_items[i])-Integer.parseInt(str2_items[i]);
						}else{
							result=0;
						}
					}
				}else{//兩個字串含有 不同數量的 "."號
					int i=0;
					while(true){//迴圈進行比對
						if(i>=str1_items.length|i>=str2_items.length){
							if(str1_items.length>str2_items.length){
								result=1;
								break;
							}else{
								result=-1;
								break;
							}
					     }else if(Integer.parseInt(str1_items[i])==Integer.parseInt(str2_items[i])){//如果相等就繼續比對
							     i++;
						}else{
							result=Integer.parseInt(str1_items[i])-Integer.parseInt(str2_items[i]);//如果不相等就返回結果
							break;
						}
					}
				}
				return result;
			}});
		System.out.println(lists);
	}
}
經過自定義Comparator後,實現的效果如下: