Reputation: 1143
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
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
Reputation: 36
You could implement a Comparator for your purpose and use: https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator)
Upvotes: 0
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