Ibexy I
Ibexy I

Reputation: 1143

How do I sort this array list in java

I am using OpenCsv to access a fie which I wish to sort and then write back to another file name. Am having problem sorting the list. Thanks.

Am trying to sort the csv file by the 1st and 2nd columns.

 CSVReader reader = new CSVReader(new FileReader("d:\\temp\\data1.csv"), ',', '"', 1);

 //Read all rows at once
 List<String[]> allRows = reader.readAll();

 //Read CSV line by line and use the string array as you want
 for(String[] row : allRows){
    System.out.println(Arrays.toString(row));
 }

 *Arrays.sort(allRows.toArray());*

 CSVWriter writer = new CSVWriter(new FileWriter("d:\\temp\\data1sorted.csv"));
 writer.writeAll(allRows);

 //close the writer
 writer.close();

I am getting the following error when I run this code:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.Comparable
    at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
    at java.util.ComparableTimSort.sort(Unknown Source)
    at java.util.ComparableTimSort.sort(Unknown Source)
    at java.util.Arrays.sort(Unknown Source)
    at CompareCsv.main(CompareCsv.java:31)

Upvotes: 0

Views: 1653

Answers (3)

Martin
Martin

Reputation: 1150

It's not clear whether you want the rows sorted within themselves or compared to each other. Assuming both;

for(String[] row : allRows)
{
   Arrays.sort(row);
}

Collections.sort(allRows, new Comparator()
{
    @Override
    public int compare(Object o1, Object o2)
    {
        String[] a = (String[])o1;
        String[] b = (String[])o2;
        return a[0].compareTo(b[0]); //you'll probably want some additional checking here.
    }
});

Upvotes: 0

Martin Pfeffer
Martin Pfeffer

Reputation: 12627

Does this help you?

public static void main(String args[]) {
            ArrayList<String> animalList = new ArrayList<String>();

        animalList.add("Dog");
        animalList.add("Cat");
        animalList.add("Snake");
        animalList.add("Bison");

        System.out.println("Before Sorting:");
        for (String tmpStr : animalList) {
            System.out.println(tmpStr);
        }

        // sorting
        Collections.sort(animalList);

        System.out.println("After Sorting:");
        for (String tmpStr : animalList) {
            System.out.println(tmpStr);
        }
    }

Upvotes: 1

Related Questions