Sorting(pengurutan) akan sering dijumpai dalam pembuatan program. Lebih lagi dalam sistem informasi yang menyajikan tabel-tabel yang berisi daftar tertentu yang menjadi hasil pemrosesan data. Misalnya saat anda membuat sistem informasi manajemen penjualan, anda mungkin saja akan diminta untuk membuat daftar nama produk yang diurutkan berdasarkan nama produk atau daftar permintaan produk yang diurutkan berdasarkan jumlah rupiah yang akan didapat dari permintaan tersebut.

Sorting dalam bahasa pemrograman java sangatlah mudah terutama untuk data dengan tipe-data primitif (mis: int, String), karena fungsinya(method-nya) sudah tersedia. Data tersebut disimpan dalam collection (mis: list, array) Berikut ini sorting data dengan tipe-data primitif.

Nama file: SortingPrimitiveData.java

1.

2.
import java.util.ArrayList;
3.
import java.util.Collections;
4.
import java.util.List;
5.
/**
6.
*
7.
* @author JSL
8.
*/
9.
public class SortingPrimitiveData {
10.
public static void main(String[] args) {
11.
List integers = new ArrayList();
12.
integers.add(98);
13.
integers.add(56);
14.
integers.add(107);
15.
integers.add(219);
16.
integers.add(45);
17.
Collections.sort(integers);
18.
for (Integer integer : integers) {
19.
System.out.println(integer);
20.
}
21.
}
22.
}
23.


Output:

1.

2.
run:
3.
45
4.
56
5.
98
6.
107
7.
219
8.
BUILD SUCCESSFUL (total time: 0 seconds)

Output dari SortingPrimitiveData.java adalah susunan angka yang diurutkan secara ascending (dari kecil ke besar). Bagaimana agar diurutkan secara descending (dari besar ke kecil)? Disini dibutuhkan implementasi interface Comparator. Berikut ini contohnya.

Nama file: ComparatorClass.java

1.

2.
import java.util.Comparator;
3.
/**
4.
*
5.
* @author JSL
6.
*/
7.
public class ComparatorClass implements Comparator {
8.
public int compare(Object o1, Object o2) {
9.
/**
10.
* sort descending
11.
*/
12.
return (Integer)o2 - (Integer) o1;
13.
/**
14.
* sort ascending
15.
*/
16.
//return (Integer)o1 - (Integer) o2;
17.
}
18.
}
19.


Kemudian tamahkan ComparatorClass sebagai parameter fungsi sort

Nama file: SortingPrimitiveData.java

1.

2.
import java.util.ArrayList;
3.
import java.util.Collections;
4.
import java.util.List;
5.
/**
6.
*
7.
* @author JSL
8.
*/
9.
public class SortingPrimitiveData {
10.
public static void main(String[] args) {
11.
List integers = new ArrayList();
12.
integers.add(98);
13.
integers.add(56);
14.
integers.add(107);
15.
integers.add(219);
16.
integers.add(45);
17.
Collections.sort(integers, new ComparatorClass());
18.
for (Integer integer : integers) {
19.
System.out.println(integer);
20.
}
21.
}
22.
}
23.


Output:

1.

2.
run:
3.
219
4.
107
5.
98
6.
56
7.
45
8.
BUILD SUCCESSFUL (total time: 0 seconds)

Sorting data dengan tipe-data referensial (Sorting objek)

Data daftar table biasanya disimpan dalam sebuah list. List tersebut berisi objek-objek yang nantinya akan membentuk baris tabel. 1 Objek 1 baris tabel. Sedangkan Kolom-kolom tabel tersebut merupakan field (property) dari sebuah objek. Kemudian anda diminta untuk melakukan pengurutan isi tabel tersebut berdasarkan salah satu kolom (property). Bagaimana anda akan melakukannya?
Berikut ini salah satu cara (dengan contoh sederhana) yang dapat digunakan.

Dari kelas berikut ini nantinya akan dibuat objek-objek yang dimasukkan dalam list.

Nama file: TeamScore.java

1.

2.
/**
3.
*
4.
* @author JSL
5.
*/
6.
public class TeamScore implements Comparable {
7.
private String teamName;
8.
private int score;
9.
public int getScore() {
10.
return score;
11.
}
12.
public void setScore(int score) {
13.
this.score = score;
14.
}
15.
public String getTeamName() {
16.
return teamName;
17.
}
18.
public void setTeamName(String teamName) {
19.
this.teamName = teamName;
20.
}
21.
public int compareTo(Object o) {
22.
/**
23.
* Sort by score ascending
24.
*/
25.
return this.score - ((TeamScore) o).score;
26.
/**
27.
* Sort by score descending
28.
*/
29.
//return ((TeamScore) o).score - this.score;
30.
}
31.
}
32.


Terlihat bahwa kelas TeamScore meng-implements interface Comparable dan dibuatkan implementasi dari fungsi compareTo().
Berikutnya adalah bagaimana kelas ini digunakan dalam sorting, berikut potongan kodenya.

Nama file: ObjectSorting.java

1.

2.
import java.util.ArrayList;
3.
import java.util.Collections;
4.
import java.util.List;
5.
/**
6.
*
7.
* @author JSL
8.
*/
9.
public class ObjectSorting {
10.
public static void main(String[] args) {
11.
List teamScores = new ArrayList();
12.
/**
13.
* Create new team
14.
*/
15.
TeamScore t1 = new TeamScore();
16.
TeamScore t2 = new TeamScore();
17.
TeamScore t3 = new TeamScore();
18.
TeamScore t4 = new TeamScore();
19.
/**
20.
* Set Team
21.
*/
22.
t1.setScore(28);
23.
t1.setTeamName("Arsenal");
24.
t2.setScore(25);
25.
t2.setTeamName("MU");
26.
t3.setScore(22);
27.
t3.setTeamName("Chealsea");
28.
t4.setScore(25);
29.
t4.setTeamName("Liverpool");
30.
/**
31.
* Add to list
32.
*/
33.
teamScores.add(t1);
34.
teamScores.add(t2);
35.
teamScores.add(t3);
36.
teamScores.add(t4);
37.
/**
38.
* Sort it
39.
*/
40.
Collections.sort(teamScores);
41.
for (TeamScore teamScore : teamScores) {
42.
System.out.println(teamScore.getTeamName() + " get " + teamScore.getScore() + " points.");
43.
}
44.
}
45.
}
46.


Output:

1.

2.
run:
3.
Chealsea get 22 points.
4.
MU get 25 points.
5.
Liverpool get 25 points.
6.
Arsenal get 28 points.
7.
BUILD SUCCESSFUL (total time: 0 seconds)

Perlu diperhatikan bahwa proses sorting diatas adalah berdasarkan score. Terlihat pada fungsi compareTo() yang dibandingkan adalah score-nya.

1.

2.
return this.score - ((TeamScore) o).score;

Sekarang, bagaimana jika objek tersebut akan diurutkan berdasarkan teamName? Seperti pada sorting data tipe-data primitif diperlukan class yang mengimplementasi interface Comparator. Berikut potongan kodenya.

Nama file: SortByTeamName.java

1.

2.
import java.util.Comparator;
3.
/**
4.
*
5.
* @author JSL
6.
*/
7.
public class SortByTeamName implements Comparator {
8.
public int compare(TeamScore t1, TeamScore t2) {
9.
/*
10.
* Sort ascending
11.
*/
12.
return t1.getTeamName().compareTo(t2.getTeamName());
13.
/*
14.
* Sort descending
15.
*/
16.
//return t2.getTeamName().compareTo(t1.getTeamName());
17.
}
18.
}
19.


Kemudian tambahkan parameter pada fungsi Collections.sort() pada kelas ObjectSorting.

Nama file: ObjectSorting.java

1.

2.
import java.util.ArrayList;
3.
import java.util.Collections;
4.
import java.util.List;
5.
/**
6.
*
7.
* @author JSL
8.
*/
9.
public class ObjectSorting {
10.
public static void main(String[] args) {
11.
List teamScores = new ArrayList();
12.
/**
13.
* Create new team
14.
*/
15.
TeamScore t1 = new TeamScore();
16.
TeamScore t2 = new TeamScore();
17.
TeamScore t3 = new TeamScore();
18.
TeamScore t4 = new TeamScore();
19.
/**
20.
* Set Team
21.
*/
22.
t1.setScore(28);
23.
t1.setTeamName("Arsenal");
24.
t2.setScore(25);
25.
t2.setTeamName("MU");
26.
t3.setScore(22);
27.
t3.setTeamName("Chealsea");
28.
t4.setScore(25);
29.
t4.setTeamName("Liverpool");
30.
/**
31.
* Add to list
32.
*/
33.
teamScores.add(t1);
34.
teamScores.add(t2);
35.
teamScores.add(t3);
36.
teamScores.add(t4);
37.
/**
38.
* Sort it
39.
*/
40.
Collections.sort(teamScores, new SortByTeamName());
41.
for (TeamScore teamScore : teamScores) {
42.
System.out.println(teamScore.getTeamName() + " get " + teamScore.getScore() + " points.");
43.
}
44.
}
45.
}
46.


Output:

1.

2.
run:
3.
Arsenal get 28 points.
4.
Chealsea get 22 points.
5.
Liverpool get 25 points.
6.
MU get 25 points.
7.
BUILD SUCCESSFUL (total time: 0 seconds)

Output-nya adalah data yang diurutkan berdasarkan property teamName.
Diposting oleh Hadi Yudhitia

0 komentar: