package tutorial59;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
class StringLengthComparator implements Comparator {
// lets make a compare method for strings based on length of string
@Override
public int compare(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
if (len1 > len2) {
return 1;
} else if (len1 < len2) {
return -1;
}
return 0;
}
}
class ReverseAlphabeticalStringComparator implements Comparator {
@Override
public int compare(String s1, String s2) {
return -s1.compareTo(s2); // compareTo gives alphabetical order, minus
// sign reverses it
}
}
public class App {
public static void main(String[] args) {
///////////////////////// Sorting Strings //////////////////////////////
List animal = new ArrayList();
animal.add("tiger");
animal.add("lion");
animal.add("snake");
animal.add("mongoose");
animal.add("cat");
animal.add("elephant");
// sort method of Collections will sort list of strings in alphabetical
// order
// Collections.sort(animal);
// this sorts animals by name string length using my override method
// Collections.sort(animal, new Comparator());
Collections.sort(animal, new ReverseAlphabeticalStringComparator());
System.out.println("Reverse aphabetical String sorted animal list: ");
for (String critter : animal) {
System.out.println(critter);
}
///////////////////////// Sorting Numbers //////////////////////////////
List list = new ArrayList();
list.add(3);
list.add(36);
list.add(73);
list.add(40);
list.add(1);
// when given a list of integers, sort method of Collections sorts it
// naturally.. numeric
Collections.sort(list);
System.out.println("\nNatural sorted number list: ");
for (Integer number : list) {
System.out.println(number);
}
// can implement own sort as anonymous class method overriding compare
// .. example is for int reversed
Collections.sort(list, new Comparator() {
@Override
public int compare(Integer num1, Integer num2) {
return -num1.compareTo(num2);
}
});
System.out.println("\nReverse sorted number list: ");
for (Integer number : list) {
System.out.println(number);
}
///////////////////////// Sorting Arbitrary Objects
///////////////////////// //////////////////////
List people = new ArrayList();
people.add(new Person(1, "joe"));
people.add(new Person(2, "sue"));
people.add(new Person(3, "clare"));
people.add(new Person(4, "bob"));
Collections.sort(people, new Comparator() {
// compare on higher id number
public int compare(Person p1, Person p2) {
if (p1.getId() < p2.getId()) {
return 1;
} else if (p1.getId() > p2.getId()) {
return -1;
}
return 0;
}
});
System.out.println("\nPeople sorted by id number list: ");
for (Person person : people) {
System.out.println(person);
}
Collections.sort(people, new Comparator() {
// compare on name string
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
});
System.out.println("\nPeople sorted by name list: ");
for (Person person : people) {
System.out.println(person);
}
}
}