Mengurutkan (sorting) objek menggunakan interface Comparable dan Comparator
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
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * @author JSL */ public class SortingPrimitiveData { List<Integer> integers = new ArrayList<Integer>(); integers.add(98); integers.add(56); integers.add(107); integers.add(219); integers.add(45); } } }
Output:
run: 45 56 98 107 219 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
import java.util.Comparator; /** * * @author JSL */ /** * sort descending */ /** * sort ascending */ //return (Integer)o1 - (Integer) o2; } }
Kemudian tamahkan ComparatorClass sebagai parameter fungsi sort
Nama file: SortingPrimitiveData.java
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * @author JSL */ public class SortingPrimitiveData { List<Integer> integers = new ArrayList<Integer>(); integers.add(98); integers.add(56); integers.add(107); integers.add(219); integers.add(45); } } }
Output:
run: 219 107 98 56 45 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
/** * * @author JSL */ private int score; public int getScore() { return score; } public void setScore(int score) { this.score = score; } return teamName; } this.teamName = teamName; } /** * Sort by score ascending */ return this.score - ((TeamScore) o).score; /** * Sort by score descending */ //return ((TeamScore) o).score - this.score; } }
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
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * @author JSL */ public class ObjectSorting { List<TeamScore> teamScores = new ArrayList<TeamScore>(); /** * Create new team */ TeamScore t1 = new TeamScore(); TeamScore t2 = new TeamScore(); TeamScore t3 = new TeamScore(); TeamScore t4 = new TeamScore(); /** * Set Team */ t1.setScore(28); t1.setTeamName("Arsenal"); t2.setScore(25); t2.setTeamName("MU"); t3.setScore(22); t3.setTeamName("Chealsea"); t4.setScore(25); t4.setTeamName("Liverpool"); /** * Add to list */ teamScores.add(t1); teamScores.add(t2); teamScores.add(t3); teamScores.add(t4); /** * Sort it */ for (TeamScore teamScore : teamScores) { } } }
Output:
run: Chealsea get 22 points. MU get 25 points. Liverpool get 25 points. Arsenal get 28 points. BUILD SUCCESSFUL (total time: 0 seconds)
Perlu diperhatikan bahwa proses sorting diatas adalah berdasarkan score. Terlihat pada fungsi compareTo() yang dibandingkan adalah score-nya.
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
import java.util.Comparator; /** * * @author JSL */ public class SortByTeamName implements Comparator<TeamScore> { public int compare(TeamScore t1, TeamScore t2) { /* * Sort ascending */ return t1.getTeamName().compareTo(t2.getTeamName()); /* * Sort descending */ //return t2.getTeamName().compareTo(t1.getTeamName()); } }
Kemudian tambahkan parameter pada fungsi Collections.sort() pada kelas ObjectSorting.
Nama file: ObjectSorting.java
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * @author JSL */ public class ObjectSorting { List<TeamScore> teamScores = new ArrayList<TeamScore>(); /** * Create new team */ TeamScore t1 = new TeamScore(); TeamScore t2 = new TeamScore(); TeamScore t3 = new TeamScore(); TeamScore t4 = new TeamScore(); /** * Set Team */ t1.setScore(28); t1.setTeamName("Arsenal"); t2.setScore(25); t2.setTeamName("MU"); t3.setScore(22); t3.setTeamName("Chealsea"); t4.setScore(25); t4.setTeamName("Liverpool"); /** * Add to list */ teamScores.add(t1); teamScores.add(t2); teamScores.add(t3); teamScores.add(t4); /** * Sort it */ for (TeamScore teamScore : teamScores) { } } }
Output:
run: Arsenal get 28 points. Chealsea get 22 points. Liverpool get 25 points. MU get 25 points. BUILD SUCCESSFUL (total time: 0 seconds)
Output-nya adalah data yang diurutkan berdasarkan property teamName.
Selamat mencoba
Baca masukan dari keyboard (using BufferedReader class)
Baca input dari keyboard.
BufferedReader input = try { stringLine = input.readLine(); } e.printStackTrace(); } return stringLine; }
░░ Error List Java Programming ░░
Berikut ini adalah daftar error yang pernah saya atau teman saya temukan saat bekerja dengan menggunakan bahasa pemrograman Java dan bagaimana solusinya. (Saya menggunkan Netbeans sebagai editor) - Daftar ini akan saya update.
1. Memory tidak mencukupi
Error:
- Exception in thread “AWT-EventQueue-0″ java.lang.OutOfMemoryError
-
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Penyebab: Kode program yang jika dijalankan, membutuhkan resource(memory) yang besar dan melebihi kapasitas yang disediakan sehingga memory tidak cukup.
Solusi: (more…)
Iterate ArrayList menggunakan Iterator Class
Short video above show you, how to iterate an arraylist collection using Iterator class. Enjoy it!
Menentukan format angka.
Suatu saat anda perlu untuk menuliskan angka yang selalu terdiri dari beberapa digit. Misalnya anda diminta agar berapapun angka tersebut akan tampil 5 digit. Contohnya:
00001 atau 00010 atau 00121
Salah satu caranya dengan menggunakan Class NumberFormat. Berikut ini contoh kodenya.
// agar format angka selalu terdiri dari 5 digit nf.setMinimumIntegerDigits(5); // nilai false agar tidak melakukan pengelompokan dalam ribuan. nf.setGroupingUsed(false); nf.format(1230);
Suatu saat anda akan memerlukan source code ini. Jika anda menggunakan bahasa pemrograman Java. Enjoy













