Link to home
Start Free TrialLog in
Avatar of panpanW
panpanW

asked on

how to sort an arraylist by column?

experts,

I need to sort an ArrayList of an OBject, which contains column A, B, C. I need to sort by column C of this object, how to do this? tried and no luck.

thanks.




Avatar of girionis
girionis
Flag of Greece image

I am not sure I understand fully. What exactly do you mean "contains column A, B, C"? Can you elaborate?


Regards
You probably mean a List of ArrayList. You can use a custom Comparator:

import java.util.*;

public class ColumnSorter implements Comparator {
  int columnIndex;

  public ColumnSorter(int columnIndex) {
    this.columnIndex = columnIndex;
  }

  public int compare(Object o1, Object o2) {
    //return ((int[])o1)[columnIndex] - ((int[])o2)[columnIndex];
    java.util.List list1 = (java.util.List)o1;
    java.util.List list2 = (java.util.List)o2;
    return ((Comparable)list1.get(columnIndex)).compareTo((Comparable)list2.get(columnIndex));
  }

}



SOLUTION
Avatar of CEHJ
CEHJ
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of panpanW
panpanW

ASKER

thanks, what do you mean by Comparable?

Things like String, Integer, Date are Comparable
What will your ArrayList contain?
Avatar of panpanW

ASKER

class test {

int a
string b
}
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
(That would sort on field 'a')
If the above comments have answered your question then please accept an answer, if not then post your further questions and we shall attempt to assist you further.
Avatar of panpanW

ASKER


thanks, but I am trying to put everything together and getting ClassCastException:

   
     public int compareTo(Object other) {
          Test otherTest = (Test)other;
          return this.a - otherTest.a;
          // (Or however you want to sort them)
     }

do you try to minus these two value? so, this will return a number? then, combined with above codes you wrote:

public class ColumnSorter implements Comparator {
  int columnIndex;

  public ColumnSorter(int columnIndex) {
    this.columnIndex = columnIndex;
  }

  public int compare(Object o1, Object o2) {
    //return ((int[])o1)[columnIndex] - ((int[])o2)[columnIndex];
    java.util.List list1 = (java.util.List)o1;
    java.util.List list2 = (java.util.List)o2;
    return ((Comparable)list1.get(columnIndex)).compareTo((Comparable)list2.get(columnIndex));
  }

}

Collections.sort(yourListOfLists, new ColumnSorter(2));
*********************************************
don't know why is getting ClassCastException??? thanks.l
Have you made your Test class Comparable?
>>do you try to minus these two value? so, this will return a number?

Yes and yes
Avatar of panpanW

ASKER

i did. it looks like the exception comes from

public int compare(Object o1, Object o2) {
    //return ((int[])o1)[columnIndex] - ((int[])o2)[columnIndex];
    List list1 = (List)o1;
    List list2 = (List)o2;
    return ((Comparable)list1.get(columnIndex)).compareTo((Comparable)list2.get(columnIndex));
  }
OK. As the first two lines of that method, do

System.out.println(o1.getClass());
System.out.println(o2.getClass());
Oh and get rid of that commented-out line i stupidly left in ;-)
Avatar of panpanW

ASKER

it returns the "test" class, not the ArrayList of test....
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
:-)
Thanks for closing the question :)