CodeGym /Blog Java /rawak /Predikat Java dengan Contoh
John Squirrels
Tahap
San Francisco

Predikat Java dengan Contoh

Diterbitkan dalam kumpulan
Secara amnya predikat bermaksud pernyataan yang menentukan sama ada nilai boleh benar atau salah. Dalam pengaturcaraan predikat fungsi min dengan satu hujah yang mengembalikan nilai boolean. Predikat Antara Muka Berfungsi direalisasikan dalam Java 8. “Fungsian” bermaksud ia mengandungi hanya satu kaedah abstrak. Ia menerima hujah dan mengembalikan boolean. Di Java, antara muka berfungsi digunakan untuk mengendalikan ungkapan Lambda, pembina dan rujukan Kaedah. Biasanya Java 8 Predicate digunakan untuk menggunakan penapis untuk koleksi objek. Mari kita lihat aplikasi utamanya dan kaedah yang digunakan secara meluas, serta menyelesaikan beberapa masalah amalan. Predikat Java dengan Contoh - 1

Mengapa Pembangun Menggunakan Predikat

Pada asasnya, pembangun boleh menggunakan predikat untuk sebarang tugas yang melibatkan penilaian item berdasarkan kriteria yang telah ditetapkan dan mengembalikan nilai boolean. Berikut ialah contoh tugas mudah yang dikendalikan oleh pembangun menggunakan predikat:
  • Menapis set integer.
  • Isih senarai dengan memastikan bahawa data mematuhi beberapa syarat yang telah ditetapkan (cth mengatur julat item dengan menetapkan syarat harga dan berat).
  • Menggunakan pakej utiliti dalam pengaturcaraan serentak.
Predikat adalah ciri penting dalam ujian perisian. Antara muka berfungsi memudahkan untuk memisahkan unit untuk ujian, meningkatkan kebolehbacaan dan kebolehurusan kod apl.

Sintaks Predikat dalam Java

java.util.function.Predicate telah diperkenalkan dalam Java 8 sebagai cara alternatif untuk mengendalikan tera penilaian dalam Lambda. Paparan standard antara muka ialah Predicate<T> , di mana T ialah argumen tunggal yang mengembalikan nilai boolean. Predikat Java mempunyai ujian kaedah (abstrak) berfungsi (Objek) yang menilai predikat ini pada Objek tertentu.

@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Berikut ialah contoh menulis Predikat mudah yang menapis integer berdasarkan keadaan "lebih besar daripada", "kurang daripada".

// 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));  
    }
}
Output akan menjadi benar kerana 10 < 18. Satu lagi contoh dengan Predikat dalam filter() . Predikat membantu menapis semua orang dewasa daripada senarai umur.

  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 ialah:
18 19 28 18 28 46 21

Kaedah Predikat Java 8

Antara Muka Predikat mempunyai beberapa kaedah.
  • ujian boolean(T t) menilai predikat pada hujah yang diberikan.
  • Predikat lalai<T> dan(Predicate<? super T> other) mengembalikan predikat yang mewakili logik litar pintas DAN predikat ini dan predikat lain.
  • Predikat lalai<T> atau mengembalikan predikat tersusun yang mewakili logik litar pintas ATAU predikat ini dan predikat lain.
  • default Predicate<T> negate() mengembalikan predikat yang bertentangan dengan predikat ini secara logik.
  • default Predicate<T> isEqual(Object targetRef) mengembalikan hasil ujian jika dua argumen adalah sama mengikut Objects.equals(Object, Object) .

ujian boolean(T t)

Ini ialah kaedah berfungsi untuk predikat Java yang menilai sama ada hujah yang diberikan memenuhi syarat predikat atau tidak. Contoh: di sini kita mencipta predikat dewasa untuk semua orang yang berumur 18 tahun atau lebih. kaedah test() mendapat nilai integer dan menyemaknya.

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));
   }
}
Apakah output untuk kod di atas? Dalam kes pertama, kerana 12 adalah kurang daripada 18, ia adalah palsu. Bagi senario kedua dan ketiga, syarat-syaratnya dipenuhi supaya pulangan akan menjadi benar.
palsu benar benar

lalai Predicate.and()

Kaedah ini mewakili pengendali "dan". Sebab itu, jika salah satu predikat yang diberikan tidak mematuhi syarat yang ditetapkan, satu lagi tidak akan mendapat penilaian. Contoh: Mari kita karang predikat dalam Java, menapis semua orang yang sudah dewasa tetapi lebih muda daripada 65 tahun menggunakan and() . Mari kita gunakan predicate.add () dan tulis predikat java dengan lambda untuk syarat ini: Jika syarat itu benar, apl 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 ialah:
palsu benar palsu

default Predicate.or()

Kaedah Predicate.or() mewakili pengendali "ATAU". Ini bermakna syarat akan kekal benar walaupun satu daripada dua predikat adalah benar dan satu lagi palsu. Contoh: mari kita nilai rentetan aksara sekarang. Cuba gunakan kaedah ATAU untuk mengisih semua frasa yang mengandungi subrentetan "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 ialah:
benar benar benar salah

Predikat lalai menafikan()

kaedah negate() digunakan untuk mengumpulkan semua nilai yang tidak mematuhi kriteria yang telah ditetapkan. Contoh: jika anda ingin mengisih kelas "Tomato" dan mencari semua entri yang bukan "Merah", anda boleh menulis Predikat dan mengimbas keseluruhan jujukan dengan cepat. Cuba tulis kod untuk yang ini sendiri dan semaknya dengan penyelesaian sebaik sahaja 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 ialah:
betul salah

Predikat statik adalahEqual(Object targetRef)

Kaedah ini sangat berguna jika anda ingin menentukan sama ada dua objek adalah sama dengan nilai yang ditakrifkan sebagai parameter Objects.equals(). Kaedah ini amat berguna jika anda perlu membandingkan hasil ujian yang serupa. Contoh: katakan anda membandingkan dua gerabak pir dan ingin memastikan sama ada kedua-duanya mempunyai berat dan warna yang standard. Dalam kes ini, Predikat statik isEqual(Object targetRef) ialah kaedah yang anda perlukan. Mari kita lihat bagaimana isEqual menyemak kesamaan dua rentetan:

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 analisa mematuhi syarat standard, fungsi tersebut akan kembali benar. Outputnya ialah:
salah, benar

Java IntPredicate

Java IntPredicate ialah antara muka berfungsi, jadi anda boleh menggunakannya sebagai sasaran tugasan untuk ungkapan lambda atau rujukan kaedah. IntPredicate beroperasi pada integer dan mengembalikan nilai predikat berdasarkan syarat. Seperti Antara Muka Predikat, IntPredicate juga mempunyai kaedah test() , dan() , negate() , atau() . Berikut ialah contoh IntPredicate. Ia juga menapis semua orang dewasa (18 atau lebih) daripada tatasusunan.

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 ialah:
18 28 18 46 90 45 21

Menulis Predikat Bersih di Jawa

Predikat Java sangat berfungsi dan menyeronokkan untuk digunakan. Walau bagaimanapun, melainkan anda mengambil berat tentang cara ungkapan lambda yang anda tulis memberi kesan kepada kod, terdapat risiko mengurangkan kebolehselenggaraan kod dengan predikat yang tidak kemas. Berikut ialah beberapa amalan mudah yang akan membantu anda memastikan antara muka berfungsi anda mudah diurus dan dibaca.
  • Jangan Ulangi Sendiri — jangan karang predikat dengan Java dengan nilai berulang, kaedah dan syarat lebih daripada sekali. Dengan cara ini, anda membuang masa produktif anda dan membuat kod tidak kemas.
  • Asingkan predikat daripada kod apl untuk memastikan kebolehujian. Selain itu, buat jadual ujian unit predikat dan patuhinya.
  • Gunakan import dan corak gubahan untuk memastikan kelas anda tidak kembung dan kekal mudah diurus.
  • Pertimbangkan untuk mengalihkan predikat Java ke kelas Helper — dengan cara ini, anda meningkatkan kebolehgunaan semula kod anda dan memudahkan penyelenggaraan.
  • Kebolehbacaan — apabila boleh, lebih suka pernyataan satu baris daripada predikat kompleks. Ia mungkin menarik untuk menunjukkan pemahaman anda tentang antara muka berfungsi yang kompleks. Walau bagaimanapun, apabila ia datang kepada penyelenggaraan, kurang adalah lebih.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION