Quote 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