|
-
September 15th, 2005, 01:59 AM
#5
Re: ArrayList Sorting
 Originally Posted by bladernr
Hello all,
How exactly do I do a numeric value sort? I think it involves creating a comparator, but I have not found anything that explains it in a way that I can wrap my hands around it.
Here's an example to get you started
Code:
import java.util.*;
public class Numbers
{
private long num;
public Numbers(long num)
{
this.num = num;
}
public Long getNumber()
{
return num;
}
public String toString()
{
return String.valueOf(num);
}
public static void main(String[] args)
{
ArrayList list = new ArrayList();
long multiplier = 10;
for(int i=0; i<10; i++)
{
list.add(new Numbers(i * multiplier));
multiplier = multiplier * 10;
}
System.out.println("Original order\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
Collections.shuffle(list);
System.out.println("\nShuffle list\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
Collections.sort(list, new Sort.ByNumberAscending());
System.out.println("\nList Ascending\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
Collections.sort(list, new Sort.ByNumberDescending());
System.out.println("\nList Descending\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
Collections.sort(list, new Sort.ByStringLengthAscending());
System.out.println("\nList arrange by string length ascending\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
Collections.sort(list, new Sort.ByStringLengthDescending());
System.out.println("\nList arrange by string length descending\n--------------");
for(int i=0; i<list.size(); i++)
{
System.out.println((Numbers)list.get(i));
}
}
}
class Sort
{
public static class ByNumberAscending implements Comparator
{
public int compare(Object object1, Object object2)
{
Numbers num1 = (Numbers) object1;
Numbers num2 = (Numbers) object2;
Long i1 = num1.getNumber();
Long i2 = num2.getNumber();
return i1.compareTo(i2);
}
}
public static class ByNumberDescending implements Comparator
{
public int compare(Object object1, Object object2)
{
Numbers num1 = (Numbers) object1;
Numbers num2 = (Numbers) object2;
Long i1 = num1.getNumber();
Long i2 = num2.getNumber();
return i2.compareTo(i1);
}
}
public static class ByStringLengthAscending implements Comparator
{
public int compare(Object object1, Object object2)
{
Numbers num1 = (Numbers) object1;
Numbers num2 = (Numbers) object2;
Integer s1 = num1.toString().length();
Integer s2 = num2.toString().length();
return s1 - s2;
}
}
public static class ByStringLengthDescending implements Comparator
{
public int compare(Object object1, Object object2)
{
Numbers num1 = (Numbers) object1;
Numbers num2 = (Numbers) object2;
Integer s1 = num1.toString().length();
Integer s2 = num2.toString().length();
return s2 - s1;
}
}
}
Output:
Original order
--------------
0
100
2000
30000
400000
5000000
60000000
700000000
8000000000
90000000000
Shuffle list
--------------
2000
100
60000000
90000000000
700000000
5000000
400000
8000000000
0
30000
List Ascending
--------------
0
100
2000
30000
400000
5000000
60000000
700000000
8000000000
90000000000
List Descending
--------------
90000000000
8000000000
700000000
60000000
5000000
400000
30000
2000
100
0
List arrange by string length ascending
--------------
0
100
2000
30000
400000
5000000
60000000
700000000
8000000000
90000000000
List arrange by string length descending
--------------
90000000000
8000000000
700000000
60000000
5000000
400000
30000
2000
100
0
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|