2012-05-30 68 views
0

我想基於對象屬性對ArrayList中的一些對象進行排序。 該對象具有:如何基於myobject的屬性對ArrayList <myobject>進行排序

public class Minterm 

{ 
    String minTerm; 
    char flagTick; 
    String minTermDerive; 
    int groupNo; 
    String adjGroup; 
    static int MaxLiterals; 

然後我有此主方法:

ArrayList<Minterm> column =new ArrayList<Minterm>(); 

然後我在列表中添加Minterm類型的一些對象。但最後我想組織它們並將它們排序在成員變量groupNo(升序)上。

我搜索了一下,想出了我嘗試過但沒有成功的可比較和比較器接口。有沒有其他方法可以做到這一點?或者我在做比較器實現錯誤。

編輯: 以下是我爲比較器寫的代碼。請確認它是否按升序排序?

package backEnd; 

import java.util.Comparator; 

public class Comp implements Comparator<Minterm> 
{ 
     @Override 
     public int compare(Minterm a, Minterm b) 
     { 
      return a.getgroupOne().compareTo(b.getgroupOne()); 
     } 
} 

我運行它:

Collections.sort(column , new Comp()); 

似乎是工作的罰款。但我對此沒有充分的理解。 請確認它是否會按升序排序?

+0

是的,你可能做錯誤。告訴我們代碼,我們會告訴你在哪裏。 –

回答

6

你應該讓Minterm實施Comparable<MinTerm>或編寫自定義ComparatorMinTerm,然後使用Collections.sort

使用比較它是這樣的:

Collections.sort(column, new Comparator<Minterm>() { 
    @Override 
    public int compare(Minterm o1, Minterm o2) { 
     return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo); 
    } 
}); 

關於您的編輯:

是。該排序Minterm s基於組中的訂單。

+1

因爲它緩存了常用的值,所以你應該更喜歡'Integer.valueOf()'到'new Integer()'。 –

+0

@JBNizet從技術上講,它緩存的值在-128到+127之間,而不是「普通」值,儘管這些是最常見的*一般*講話 – Bohemian

+0

@波希米亞語:是的,這就是我的意思是「普通」。 –

2

兩種方式,使用Collections.sort(..)

  • 讓你的對象實施Comparable。涉及改變原來的類,這可能是不可能的
  • 供應定製Comparator。它需要你的對象的實例並比較它們。不需要對班級進行更改。

無論哪種方式,請確保您符合接口的合同。

+0

...改變原來的* class * ... – aioobe

+0

當然...... – Bozho

3

Collections.sort()Comparator接口正是這項工作的正確工具。

東西沿着以下行應該這樣做(未經測試):

Collections.sort(column, new Comparator<Minterm>() { 
    public int compare(Minterm o1, Minterm o2) { 
     return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo); 
    } 
    }); 
0

下面是示例代碼(更多例子參見http://java2novice.com/java-collections-and-util/arraylist/sort-comparator/):

public class MyArrayListSort { 

    public static void main(String a[]){ 

     List<Empl> list = new ArrayList<Empl>(); 
     list.add(new Empl("Ram",3000)); 
     list.add(new Empl("John",6000)); 
     list.add(new Empl("Crish",2000)); 
     list.add(new Empl("Tom",2400)); 
     Collections.sort(list,new MySalaryComp()); 
     System.out.println("Sorted list entries: "); 
     for(Empl e:list){ 
      System.out.println(e); 
     } 
    } 
} 

class MySalaryComp implements Comparator<Empl> { 

    @Override 
    public int compare(Empl e1, Empl e2) { 
     if(e1.getSalary() < e2.getSalary()){ 
      return 1; 
     } else { 
      return -1; 
     } 
    } 
} 

class Empl{ 

    private String name; 
    private int salary; 

    public Empl(String n, int s){ 
     this.name = n; 
     this.salary = s; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getSalary() { 
     return salary; 
    } 
    public void setSalary(int salary) { 
     this.salary = salary; 
    } 
    public String toString(){ 
     return "Name: "+this.name+"-- Salary: "+this.salary; 
    } 
} 
相關問題