オブジェクト配列をソート---Arrays.sort(Object[bean])

5069 ワード

簡単な説明:
並べ替えが必要なクラスはComparableインタフェースを実装し,compareToメソッドを書き換える.
さらにオブジェクト配列ソート(昇順降順)を実現
 
 
----------------------------------------------------------------------------------------------------------------------------------
注意:昇順時に書き換えたcompareToメソッドreturn結果を照合
 
public int compareTo(impl_Comparable o) {
		……………………
		if (n > 0) {
			//   1   : 。( o.date ,  this.date)
			return 1;
		} else {
			//   -1  : 。( this.date ,  o.date)
			return -1;
		}
	}

----------------------------------------------------------------------------------------------------------------------------------
 
 
実装方法を追加します.
 
----------------------------------------------------------------------------------------------------------------------------------
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Arrays;  
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;  
import java.util.List;

// Comparable ,   
public class Impl_Comparable {  
  
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  
    //  Date  
    public Date date = new Date();  
  
    public Impl_Comparable(String str) {  
        try {  
            date = sdf.parse(str);  
        } catch (ParseException e) {  
        }  
    }  
  
    //  toString   
    public String toString() {  
        return sdf.format(date);  
    }  
      
    public static void main(String[] args) {
        //  ,  3 TestComparable   
        Impl_Comparable[] c = new Impl_Comparable[] {   
                new Impl_Comparable("2012-07-12"),  
                new Impl_Comparable("2012-07-1"),  
                new Impl_Comparable("2012-12-12"),   
                new Impl_Comparable("2016-07-12"),   
                new Impl_Comparable("2016-08-12"),   
                new Impl_Comparable("2016-07-31"),   
                new Impl_Comparable("1989-05-01")  
                };  
        List<Impl_Comparable> list = Arrays.asList(c);
        
        //    
        System.out.println(list);  
        //    
        Collections.sort(Arrays.asList(c), new Comparator<Impl_Comparable>(){
			public int compare(Impl_Comparable o1,Impl_Comparable o2) {
				 //  o1.date o2.date , n>0  
		        long n = o1.date.getTime() - o2.date.getTime();  
		        if (n > 0) {  
		            //   -1  : 。( o1.date ,  o2.date)  
		            return -1;  
		        } else {  
		            //   1   : 。( o2.date ,  o1.date)  
		            return 1;  
		        }  
			}			
		});
        //    
        System.out.println(list);  
    }  
}  

 
----------------------------------------------------------------------------------------------------------------------------------
 
 
コードの説明:
例は、オブジェクトのdateプロパティを降順に並べます.
package Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

// Comparable , 
public class impl_Comparable implements Comparable<impl_Comparable> {

	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

	//  Date
	public Date date = new Date();

	public impl_Comparable(String str) {
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
		}
	}

	//   Comparable ,  date
	public int compareTo(impl_Comparable o) {
		
		//  this.date o.date , n>0
		long n = date.getTime() - o.date.getTime();
		if (n > 0) {
			//   -1  : 。( this.date ,  o.date)
			return -1;
		} else {
			//   1   : 。( o.date ,  this.date)
			return 1;
		}
	}

	//  toString 
	public String toString() {
		return sdf.format(date);
	}
	
	public static void main(String[] args) {
		//  ,  3 TestComparable 
		impl_Comparable[] c = new impl_Comparable[] { 
				new impl_Comparable("2012-07-12"),
				new impl_Comparable("2012-07-1"),
				new impl_Comparable("2012-12-12"), 
				new impl_Comparable("2016-07-12"), 
				new impl_Comparable("2016-08-12"), 
				new impl_Comparable("2016-07-31"), 
				new impl_Comparable("1989-05-01")
				};
		//  
		System.out.println(Arrays.asList(c));
		//  
		Arrays.sort(c);
		//  
		System.out.println(Arrays.asList(c));
		
	}

}