2012-05-30 3 views
0

Я хочу отсортировать некоторые объекты, находящиеся в ArrayList, на основе свойств объектов. объект имеет:Как отсортировать ArrayList <myobject> на основе свойств 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 (по возрастанию).

Я искал и нашел сопоставимые и сравнительные интерфейсы, которые я пробовал, но не смог. есть ли другой способ сделать это? или я делаю ошибку компаратора неправильно.

EDIT: Ниже приведен код, который я написал для компаратора. Подтвердите, будет ли он сортироваться по возрастанию?

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> или написать обычай Comparator для MinTerm, а затем использовать 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 на основе групп в по возрастанию order.

+1

Вы должны предпочесть 'Integer.valueOf()' to 'new Integer()', поскольку он кэширует общие значения. –

+0

@JBNizet Ну, технически он кэширует значения между -128 и +127, а не «общие» значения, хотя они являются самыми распространенными * вообще * говорящими – Bohemian

+0

@Bohemian: да, это то, что я имел в виду с «общим». –

2

два способа, с помощью Collections.sort(..):

  • сделать ваш объект реализации Comparable. Привлекает изменение первоначального класса, что может быть невозможно
  • поставка таможня Comparator. Он принимает экземпляры вашего объекта и сравнивает их. Не требует изменения класса.

В любом случае, убедитесь, что вы соответствуете контрактам интерфейсов.

+0

... изменение оригинал * класс * ... – 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; 
    } 
} 
Смежные вопросы