import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.stream.Collectors;

import static java.lang.Math.*;

public class Sort {
      
   public static void main (String [] args) throws NumberFormatException {
      final int [] data  = new int [args.length];
      for (int i=0; i<data.length; i++) {
         data[i] = Integer.parseInt (args[i]);
      }

      System.out.printf ("..: %s%n", Arrays.toString(data));

      // Sort a primitive array (in ascending order) 
      Arrays.sort (data);

      System.out.printf ("**: %s%n", Arrays.toString(data));

      // Convert primitive int array to an array list
      final List<Integer> list2 = new ArrayList<Integer> (data.length);
      for (Integer i: data) list2.add (i);

      // Convert primitive int array to a list
      final List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());

      // Sort a collection (in ascending order) 
      Collections.sort (list2);

      // Sort in descending order
      Collections.sort (list2, Collections.reverseOrder());

      // Descending sort using Java 8 lambda
      Collections.sort (list2, (i,j) -> Integer.compare(j,i));

      // Unusual, total-order on integers
      Collections.sort (list2, new Comparator<Integer>(){
            public int compare (Integer i, Integer j) {
               final int i1 = 2*abs(i)+ (i<0?-1:0);
               final int j1 = 2*abs(j)+ (j<0?-1:0);
               return Integer.compare (i1,j1);
            }
         });

      // Unusual, total-order on integers using Java 8 lambda
      Collections.sort (list2, (i,j) -> {
               final int i1 = 2*abs(i)+ (i<0?-1:0);
               final int j1 = 2*abs(j)+ (j<0?-1:0);
               return Integer.compare (i1,j1);});

   }
}