N
Nishi Bhonsle
Hi:
The compareTo() method in the Comparable Interface can be used to sort objects in a collection according to integer data such as cost, age etc.
How can I sort elements of an collection based on string values such as firstname or lastname?
Cheers, Nishi.
-----------------------------------------------------------------------------------------------------------------
import java.util.*;
class Comparer implements Comparator {
public int compare(Object obj1, Object obj2)
{
String i1 = ((Person)obj1).getLastName().toString();
String i2 = ((Person)obj2).getLastName().toString();
return i1.compareTo(i2);
}
}
class Person implements Comparable {
private String firstName;
private String lastName;
private int age;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//for sorting according to age
public int compareTo(Object anotherPerson) throws ClassCastException {
if (!(anotherPerson instanceof Person))
throw new ClassCastException("A Person object expected.");
int anotherPersonAge = ((Person) anotherPerson).getAge();
return this.age - anotherPersonAge;
}
}
public class Testing {
public static void main(String[] args) {
Person[] persons = new Person[3];
List p = new LinkedList();
persons[0] = new Person();
persons[0].setFirstName("Elvis");
persons[0].setLastName("Goodyear");
persons[0].setAge(56);
persons[1] = new Person();
persons[1].setFirstName("Stanley");
persons[1].setLastName("Clark");
persons[1].setAge(8);
persons[2] = new Person();
persons[2].setFirstName("Jane");
persons[2].setLastName("Amir");
persons[2].setAge(16);
p.add(0, persons[0]);
p.add(1, persons[1]);
p.add(2, persons[2]);
System.out.println("Natural Order");
for (int i=0; i<3; i++) {
Person person = persons;
String lastName = person.getLastName();
String firstName = person.getFirstName();
int age = person.getAge();
System.out.println(lastName + ", " + firstName + ". Age:" + age);
}
//Arrays.sort(persons);
Collections.sort(p, new Comparer());
System.out.println();
System.out.println("Sorted by age");
for (int i=0; i<3; i++) {
Person ps = (Person)p.get(i);
String lastName = ps.getLastName();
String firstName = ps.getFirstName();
int age = ps.getAge();
System.out.println(lastName + ", " + firstName + ". Age:" + age);
}
}
}
The compareTo() method in the Comparable Interface can be used to sort objects in a collection according to integer data such as cost, age etc.
How can I sort elements of an collection based on string values such as firstname or lastname?
Cheers, Nishi.
-----------------------------------------------------------------------------------------------------------------
import java.util.*;
class Comparer implements Comparator {
public int compare(Object obj1, Object obj2)
{
String i1 = ((Person)obj1).getLastName().toString();
String i2 = ((Person)obj2).getLastName().toString();
return i1.compareTo(i2);
}
}
class Person implements Comparable {
private String firstName;
private String lastName;
private int age;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//for sorting according to age
public int compareTo(Object anotherPerson) throws ClassCastException {
if (!(anotherPerson instanceof Person))
throw new ClassCastException("A Person object expected.");
int anotherPersonAge = ((Person) anotherPerson).getAge();
return this.age - anotherPersonAge;
}
}
public class Testing {
public static void main(String[] args) {
Person[] persons = new Person[3];
List p = new LinkedList();
persons[0] = new Person();
persons[0].setFirstName("Elvis");
persons[0].setLastName("Goodyear");
persons[0].setAge(56);
persons[1] = new Person();
persons[1].setFirstName("Stanley");
persons[1].setLastName("Clark");
persons[1].setAge(8);
persons[2] = new Person();
persons[2].setFirstName("Jane");
persons[2].setLastName("Amir");
persons[2].setAge(16);
p.add(0, persons[0]);
p.add(1, persons[1]);
p.add(2, persons[2]);
System.out.println("Natural Order");
for (int i=0; i<3; i++) {
Person person = persons;
String lastName = person.getLastName();
String firstName = person.getFirstName();
int age = person.getAge();
System.out.println(lastName + ", " + firstName + ". Age:" + age);
}
//Arrays.sort(persons);
Collections.sort(p, new Comparer());
System.out.println();
System.out.println("Sorted by age");
for (int i=0; i<3; i++) {
Person ps = (Person)p.get(i);
String lastName = ps.getLastName();
String firstName = ps.getFirstName();
int age = ps.getAge();
System.out.println(lastName + ", " + firstName + ". Age:" + age);
}
}
}