logoBelajarJava[dot]Com


Mengurutkan (sorting) objek menggunakan interface Comparable dan Comparator

Posted in Fundamental, Intermediate by jolly on the January 15th, 2010

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<Integer> integers = new ArrayList<Integer>();
  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<Integer> integers = new ArrayList<Integer>();
  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<TeamScore> teamScores = new ArrayList<TeamScore>();
  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<TeamScore> {
  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<TeamScore> teamScores = new ArrayList<TeamScore>();
  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.

Selamat mencoba :)

You can help me to share this post by klicking icons below. Enjoy it. These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • Google Bookmarks
  • Digg
  • del.icio.us
  • MySpace
  • StumbleUpon
  • Reddit
  • Technorati

Baca masukan dari keyboard (using BufferedReader class)

Posted in Fundamental by jolly on the November 20th, 2009
Baca input dari keyboard.

  1. public String inputString() {
  2. String stringLine = "";
  3. try {
  4. stringLine = input.readLine();
  5. }
  6. catch (Exception e) {
  7. e.printStackTrace();
  8. }
  9. return stringLine;
  10. }

You can help me to share this post by klicking icons below. Enjoy it. These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • Google Bookmarks
  • Digg
  • del.icio.us
  • MySpace
  • StumbleUpon
  • Reddit
  • Technorati

░░ Error List Java Programming ░░

Posted in Errors, Fundamental by jolly on the August 7th, 2009

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:

  1. Exception in thread “AWT-EventQueue-0″ java.lang.OutOfMemoryError
  2. 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…)

You can help me to share this post by klicking icons below. Enjoy it. These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • Google Bookmarks
  • Digg
  • del.icio.us
  • MySpace
  • StumbleUpon
  • Reddit
  • Technorati

Iterate ArrayList menggunakan Iterator Class

Posted in Fundamental by jolly on the March 25th, 2009

Short video above show you, how to iterate an arraylist collection using Iterator class. Enjoy it!

You can help me to share this post by klicking icons below. Enjoy it. These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • Google Bookmarks
  • Digg
  • del.icio.us
  • MySpace
  • StumbleUpon
  • Reddit
  • Technorati

Menentukan format angka.

Posted in Fundamental by jolly on the March 5th, 2009

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.

  1. NumberFormat nf = NumberFormat.getNumberInstance();
  2. // agar format angka selalu terdiri dari 5 digit
  3. nf.setMinimumIntegerDigits(5);
  4. // nilai false agar tidak melakukan pengelompokan dalam ribuan.
  5. nf.setGroupingUsed(false);
  6. nf.format(1230);
  7.  

Suatu saat anda akan memerlukan source code ini. Jika anda menggunakan bahasa pemrograman Java. Enjoy :D

You can help me to share this post by klicking icons below. Enjoy it. These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • Google Bookmarks
  • Digg
  • del.icio.us
  • MySpace
  • StumbleUpon
  • Reddit
  • Technorati
Next Page »