CodeGym /Java Blog /Acak /Predikat Java dengan Contoh
John Squirrels
Level 41
San Francisco

Predikat Java dengan Contoh

Dipublikasikan di grup Acak
Umumnya predikat berarti pernyataan yang menentukan apakah suatu nilai bisa benar atau salah. Dalam pemrograman predikat berarti fungsi dengan satu argumen yang mengembalikan nilai boolean. Predikat Antarmuka Fungsional diwujudkan dalam Java 8. "Fungsional" berarti hanya berisi satu metode abstrak. Itu menerima argumen dan mengembalikan boolean. Di Java, antarmuka fungsional digunakan untuk menangani ekspresi Lambda, konstruktor, dan referensi Metode. Biasanya Predikat Java 8 digunakan untuk menerapkan filter untuk kumpulan objek. Mari kita lihat aplikasi utamanya dan metode yang digunakan secara luas, serta menyelesaikan beberapa soal latihan. Predikat Java dengan Contoh - 1

Mengapa Pengembang Menggunakan Predikat

Pada dasarnya, pengembang dapat menggunakan predikat untuk tugas apa pun yang melibatkan evaluasi item berdasarkan kriteria yang telah ditentukan dan mengembalikan nilai boolean. Berikut adalah contoh tugas sederhana yang ditangani pengembang menggunakan predikat:
  • Memfilter satu set bilangan bulat.
  • Menyortir daftar dengan memastikan bahwa data sesuai dengan beberapa kondisi yang telah ditentukan sebelumnya (misalnya mengatur berbagai item dengan menetapkan kondisi harga dan berat).
  • Menggunakan paket utilitas dalam pemrograman bersamaan.
Predikat adalah fitur penting dalam pengujian perangkat lunak. Antarmuka fungsional mempermudah pemisahan unit untuk pengujian, meningkatkan keterbacaan, dan pengelolaan kode aplikasi.

Predikat Sintaks di Jawa

java.util.function.Predicate diperkenalkan di Java 8 sebagai cara alternatif untuk menangani tayangan penilaian di Lambda. Tampilan standar antarmuka adalah Predicate<T> , di mana T adalah argumen tunggal yang mengembalikan nilai boolean. Predikat Java memiliki fungsi (abstrak) metode test(Object) yang mengevaluasi predikat ini pada Objek yang diberikan.

@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Berikut contoh penulisan Predikat sederhana yang memfilter bilangan bulat berdasarkan kondisi “lebih besar dari”, “lebih kecil dari”.

// An example of a simple Java predicate
  
import java.util.function.Predicate; 
public class PredicateExample { 
    public static void main(String[] args) 
    { 
        // Creating predicate 
        Predicate<Integer> lesserThan = i -> (i < 18);  
  
        // Calling Predicate method 
        System.out.println(lesserThan.test(10));  
    }
}
Outputnya akan benar karena 10 < 18. Satu lagi contoh dengan Predikat di filter() . Predikat membantu memfilter semua orang dewasa dari daftar usia.

  import java.util.List;
  import java.util.function.Predicate;

  public class PredicateExample {
      public static void main(String[] args) {
          List<Integer> ages = List.of(17, 18, 19, 28, 18, 28, 46, 7, 8, 9, 21, 12);
          NotLessThan18<Integer> isAdult = new NotLessThan18<>();
          ages.stream().filter(isAdult).forEach(System.out::println);
      }
  }



class NotLessThan18<E> implements Predicate<Integer> {

      @Override
      public boolean test(Integer v) {
          Integer ADULT = 18;
          return v >= ADULT;
      }
  }
Outputnya adalah:
18 19 28 18 28 46 21

Metode Predikat Java 8

Antarmuka Predikat memiliki beberapa metode.
  • boolean test(T t) mengevaluasi predikat pada argumen yang diberikan.
  • default Predicate<T> and(Predicate<? super T> other) mengembalikan predikat yang mewakili hubungan pendek logika AND dari predikat ini dan lainnya.
  • Predikat default<T> atau mengembalikan predikat tersusun yang mewakili logika hubungan arus pendek OR dari predikat ini dan lainnya.
  • predikat default<T> negate() mengembalikan predikat yang berlawanan dengan predikat ini secara logis.
  • default Predicate<T> isEqual(Object targetRef) mengembalikan hasil pengujian jika dua argumen sama menurut Objects.equals(Object, Object) .

uji boolean (T t)

Ini adalah metode fungsional untuk predikat Java yang mengevaluasi apakah argumen yang diberikan memenuhi kondisi predikat atau tidak. Contoh: disini kita membuat predikat dewasa untuk setiap orang yang berumur 18 tahun atau lebih. metode test() mendapatkan nilai integer dan memeriksanya.

import java.util.function.Predicate;
public class PredicateTestTest {
   public static void main(String[] args) {
       Predicate<Integer> adult = i -> i >= 18;
       System.out.println(adult.test(12));
       System.out.println(adult.test(19));
       System.out.println(adult.test(21));
   }
}
Apa yang akan menjadi output untuk kode di atas? Dalam kasus pertama, karena 12 lebih kecil dari 18, itu akan salah. Adapun skenario kedua dan ketiga, kondisi terpenuhi sehingga return akan benar.
palsu benar benar

Predikat default.dan()

Metode ini mewakili operator "dan". Itu sebabnya, jika salah satu predikat yang diberikan tidak sesuai dengan kondisi yang ditetapkan, yang lain tidak akan mendapatkan penilaian. Contoh: Mari kita buat predikat di Java, memfilter semua orang yang sudah dewasa tetapi lebih muda dari 65 tahun menggunakan and() . Mari gunakan predicate.add () dan tulis predikat java dengan lambda untuk kondisi ini: Jika kondisinya benar, aplikasi akan mengembalikan pernyataan berikut:

import java.util.function.Predicate;

   public class PredicateDemo {
       public static void main(String[] args) {
           Predicate<Integer> adultYet = i -> i >= 18;
           Predicate<Integer> adultStill = i -> i < 65;
           System.out.println(adultYet.and(adultStill).test(5));
           System.out.println(adultYet.and(adultStill).test(38));
           System.out.println(adultYet.and(adultStill).test(90));
       }
   }
Outputnya adalah:
salah benar salah

Predikat default.or()

Metode Predikat.or() mewakili operator "ATAU". Artinya, kondisi akan tetap benar meskipun salah satu dari dua predikat benar dan yang lainnya salah. Contoh: mari kita evaluasi string karakter sekarang. Coba gunakan metode ATAU untuk mengurutkan semua frasa yang mengandung substring “saya” atau “krayon”.

import java.util.function.Predicate;

  public class PredicateDemo2 {
      public static void main(String[] args) {
          Predicate<String> containsA = t -> t.contains("crayon");
          Predicate<String> containsB = t -> t.contains("my");
          System.out.println(containsA.or(containsB).test("here is my crayon"));
          System.out.println(containsA.or(containsB).test("here is my pencil"));
          System.out.println(containsA.or(containsB).test("here is John's crayon"));
          System.out.println(containsA.or(containsB).test("here is John's pencil"));
      }
  }
Outputnya adalah:
benar benar benar salah

Predikat default negasi()

Metode negate() digunakan untuk mengumpulkan semua nilai yang tidak sesuai dengan kriteria yang telah ditentukan. Contoh: jika Anda ingin mengurutkan kelas "Tomat" dan menemukan semua entri yang bukan "Merah", Anda dapat menulis Predikat dan memindai seluruh urutan dengan cepat. Coba tulis kode untuk yang ini sendiri dan periksa dengan solusi setelah Anda selesai.

import java.util.function.Predicate;

public class PredicateDemo3 {
public static void main(String[] args) {
 Predicate<Integer> adult = i -> i >= 18;
System.out.println(adult.negate().test(7));  System.out.println(adult.negate().test(19))
  }
   }
Outputnya adalah:
benar salah

Predikat statis sama dengan(Object targetRef)

Metode ini sangat berguna jika Anda ingin menentukan apakah dua objek sama dengan nilai yang didefinisikan sebagai parameter Objects.equals(). Metode ini sangat berguna jika Anda perlu membandingkan hasil pengujian yang serupa. Contoh: katakanlah Anda membandingkan dua gerbong pir dan ingin memastikan apakah keduanya memiliki buah dengan berat dan warna standar. Dalam hal ini, static Predicate isEqual(Object targetRef) adalah metode yang Anda butuhkan. Mari kita lihat bagaimana isEqual memeriksa kesetaraan dua string:

import java.util.function.Predicate;

public class PredicateDemo2 {
   public static void main(String[] args) {
       Predicate<String> i = Predicate.isEqual("here is my crayon");
       System.out.println(i.test("here is my pencil"));
       System.out.println(i.test("here is my crayon"));
   }
}
Jika objek yang Anda analisis sesuai dengan kondisi standar, fungsi akan mengembalikan nilai true. Outputnya adalah:
salah benar

Java IntPredikat

Java IntPredicate adalah antarmuka fungsional, sehingga Anda dapat menggunakannya sebagai target penugasan untuk ekspresi lambda atau referensi metode. IntPredicate beroperasi pada bilangan bulat dan mengembalikan nilai predikat berdasarkan kondisi. Seperti Antarmuka Predikat, IntPredicate juga memiliki metode test() , and() , negate() , or() . Berikut adalah contoh dari IntPredicate. Itu juga memfilter semua orang dewasa (18 atau lebih) dari array.

import java.util.Arrays;
import java.util.function.IntPredicate;

public class IntPredicateExample {

   public static void main(String[] args) {

       int[] ages = { 18, 28, 18, 46, 90, 45, 2, 3, 1, 5, 7, 21, 12 };

       IntPredicate p = n -> n >= 18;

       Arrays.stream(ages).filter(p).forEach(System.out::println);
   }
}
Outputnya adalah:
18 28 18 46 90 45 21

Menulis Predikat Bersih di Jawa

Predikat Java sangat fungsional dan menyenangkan untuk dikerjakan. Namun, kecuali Anda menyadari bagaimana ekspresi lambda yang Anda tulis berdampak pada kode, ada risiko mengurangi pemeliharaan kode dengan predikat yang berantakan. Berikut adalah beberapa praktik sederhana yang akan membantu Anda memastikan antarmuka fungsional Anda mudah dikelola dan dibaca.
  • Don't Repeat Yourself — jangan membuat predikat dengan Java dengan nilai, metode, dan kondisi berulang lebih dari sekali. Dengan cara ini, Anda membuang waktu produktif dan membuat kode menjadi berantakan.
  • Pisahkan predikat dari kode aplikasi untuk memastikan testabilitas. Selain itu, buat jadwal pengujian unit predikat dan patuhi itu.
  • Gunakan impor dan pola komposisi untuk memastikan kelas Anda tidak membengkak dan tetap mudah dikelola.
  • Pertimbangkan untuk memindahkan predikat Java ke kelas Pembantu — dengan cara ini, Anda meningkatkan kemampuan penggunaan ulang kode dan memfasilitasi pemeliharaan.
  • Keterbacaan — bila memungkinkan, pilih pernyataan satu baris daripada predikat kompleks. Mungkin tergoda untuk memamerkan pemahaman Anda tentang antarmuka fungsional yang kompleks. Namun, dalam hal pemeliharaan, lebih sedikit lebih baik.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION