CodeGym /Java Blogu /Rastgele /Örneklerle Java Yüklemi
John Squirrels
Seviye
San Francisco

Örneklerle Java Yüklemi

grupta yayınlandı
Genel olarak yüklem, bir değerin doğru veya yanlış olabileceğini belirleyen bir ifade anlamına gelir. Programlamada yüklemler, bir boole değeri döndüren tek bağımsız değişkenli ortalama işlevlerdir. Functional Interface Predicate, Java 8'de gerçekleştirilmiştir. “Fonksiyonel”, yalnızca bir soyut yöntem içerdiği anlamına gelir. Bir bağımsız değişkeni kabul eder ve bir boole döndürür. Java'da, Lambda ifadelerini, yapıcıları ve Yöntem referanslarını işlemek için işlevsel arabirimler kullanılır. Genellikle Java 8 Predicate, bir nesne koleksiyonuna filtre uygulamak için kullanılır. Ana uygulamalarına ve yaygın olarak kullanılan yöntemlerine bir göz atalım ve bazı alıştırma problemlerini çözelim. Örneklerle Java Yüklemi - 1

Geliştiriciler Neden Predicate Kullanıyor?

Temel olarak geliştiriciler, önceden tanımlanmış ölçütlere göre öğeleri değerlendirmeyi ve bir boole değeri döndürmeyi içeren herhangi bir görev için tahminleri kullanabilir. Geliştiricilerin yüklemleri kullanarak ele aldığı basit görevlerin örnekleri şunlardır:
  • Bir tamsayı kümesini filtreleme.
  • Verilerin önceden tanımlanmış birkaç koşulla uyumlu olmasını sağlayarak listeleri sıralamak (örneğin, fiyat ve ağırlık koşullarını belirleyerek bir ürün yelpazesi düzenlemek).
  • Eşzamanlı programlamada yardımcı paketlerin kullanılması.
Tahminler, yazılım testinde önemli bir özelliktir. İşlevsel arayüz, test için birimleri ayırmayı kolaylaştırır, uygulama kodunun okunabilirliğini ve yönetilebilirliğini geliştirir.

Java'da Tahmin Sözdizimi

java.util.function.Predicate, Lambda'da değerlendirme gösterimlerini işlemenin alternatif bir yolu olarak Java 8'de sunulmuştur. Arayüzün standart görünümü, Predicate<T> şeklindedir ; burada T, bir boole değeri döndüren tek bir bağımsız değişkendir. Java Tahminleri , bu yüklemi belirli bir Nesne üzerinde değerlendiren işlevsel (soyut) bir test(Object) yöntemine sahiptir.

@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
İşte tamsayıları "büyüktür", "küçüktür" koşullarına göre filtreleyen basit bir Tahmin yazma örneği.

// 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));  
    }
}
10 < 18 olduğu için çıktı doğru olacaktır . Filter() içinde Predicate ile bir örnek daha . Tahmin, tüm yetişkinleri yaş listesinden filtrelemeye yardımcı olur.

  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;
      }
  }
Çıktı:
18 19 28 18 28 46 21

Java 8 Tahmin Yöntemleri

Predicate Arayüzünün bir avuç yöntemi vardır.
  • boolean testi(T t) verilen bağımsız değişkendeki yüklemi değerlendirir.
  • default Predicate<T> and(Predicate<? super T> other), bu yüklemin ve diğerinin kısa devre yapan bir mantıksal AND'sini temsil eden bir yüklemi döndürür.
  • default Predicate<T> veya bu yüklemin ve diğerinin kısa devre yapan bir mantıksal VEYA'sını temsil eden birleşik bir yüklemi döndürür.
  • default Predicate<T> negate() mantıksal olarak bu yüklemin tersi olan bir yüklem döndürür.
  • default Predicate<T> isEqual(Object targetRef), iki bağımsız değişkenin Objects.equals(Object, Object)' e göre eşit olup olmadığını test etmenin bir sonucunu döndürür .

boole testi(T t)

Bu, belirli bir argümanın bir yüklemin koşulunu karşılayıp karşılamadığını değerlendiren Java yüklemleri için işlevsel bir yöntemdir. Örnek: Burada 18 yaş ve üzeri herkes için yetişkin bir yüklem oluşturuyoruz. test() yöntemi bir tamsayı değeri alır ve onu kontrol eder.

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));
   }
}
Yukarıdaki kodun çıktısı ne olur? İlk durumda, 12, 18'den küçük olduğu için yanlış olacaktır. İkinci ve üçüncü senaryoda ise, geri dönüşün doğru olması için koşullar sağlanıyor.
yanlış doğru doğru

varsayılan Tahmin.and()

Bu metot “ve” operatörünü temsil eder. Bu nedenle verilen yüklemlerden biri belirli bir koşula uymazsa, diğeri değerlendirme alamayacaktır. Örnek: Java'da, zaten yetişkin olan ancak 65 yaşından küçük tüm insanları and() kullanarak filtreleyerek yüklemler oluşturalım . Predicate.add() 'ı kullanalım ve şu koşullar için lambda ile bir java yüklemi yazalım: Koşul doğruysa, uygulama aşağıdaki ifadeyi döndürür:

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));
       }
   }
Çıktı:
yanlış doğru yanlış

varsayılan Tahmin.veya()

Predicate.or() yöntemi, "OR" operatörünü temsil eder. Bu, iki yüklemden biri doğru, diğeri yanlış olsa bile koşulun doğru kalacağı anlamına gelir. Örnek: Şimdi karakter dizilerini değerlendirelim. "my" veya "crayon" alt dizesini içeren tüm tümceleri sıralamak için OR yöntemini kullanmayı deneyin.

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"));
      }
  }
Çıktı:
doğru doğru doğru yanlış

varsayılan Tahmini olumsuzla ()

negate() yöntemi, önceden tanımlanmış kriterlere uymayan tüm değerleri toplamak için kullanılır. Örnek: "Domates" sınıfını sıralamak ve "Kırmızı" olmayan tüm girişleri bulmak istiyorsanız, bir Yüklem yazabilir ve tüm diziyi hızlıca tarayabilirsiniz. Bunun kodunu kendi başınıza yazmayı deneyin ve işiniz bittiğinde çözümle karşılaştırın.

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))
  }
   }
Çıktı:
doğru yanlış

static Predicate isEqual(Object targetRef)

Bu yöntem, iki nesnenin Objects.equals() parametresi olarak tanımlanan bir değere eşit olup olmadığını belirlemek istiyorsanız oldukça kullanışlıdır. Bu yöntem, özellikle benzer test sonuçlarını karşılaştırmanız gerektiğinde kullanışlıdır. Örnek: Diyelim ki iki vagon armutu karşılaştırıyorsunuz ve her ikisinin de standart ağırlıkta ve renkte meyveleri olup olmadığından emin olmak istiyorsunuz. Bu durumda static Predicate isEqual(Object targetRef) tam olarak ihtiyacınız olan yöntemdir. Şimdi isEqual'in iki dizginin eşitliğini nasıl kontrol ettiğine bir göz atalım :

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"));
   }
}
Analiz ettiğiniz bir nesne standart koşullara uyuyorsa işlev true değerini döndürür. Çıktı:
yanlış doğru

Java IntPredicate

Java IntPredicate işlevsel bir arabirimdir, dolayısıyla onu bir lambda ifadesi veya yöntem başvurusu için atama hedefi olarak kullanabilirsiniz. IntPredicate bir tamsayı üzerinde çalışır ve bir koşula dayalı olarak bir yüklem değeri döndürür. Predicate Arayüzü gibi, IntPredicate de test() , and() , negate() veya () yöntemlerine sahiptir. İşte bir IntPredicate örneği. Ayrıca dizideki tüm yetişkinleri (18 veya daha fazla) filtreler.

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);
   }
}
Çıktı:
18 28 18 46 90 45 21

Java'da Temiz Tahminler Yazmak

Java Tahminleri oldukça işlevseldir ve birlikte çalışmak eğlencelidir. Ancak, yazdığınız lambda ifadelerinin kodu nasıl etkilediğine dikkat etmediğiniz sürece, dağınık yüklemlerle kod bakımını azaltma riski vardır. İşlevsel arayüzlerinizin yönetimi ve okunmasının kolay olmasını sağlamanıza yardımcı olacak birkaç basit uygulama aşağıda verilmiştir.
  • Kendinizi Tekrar Etmeyin — Java ile birden fazla tekrarlanan değerler, yöntemler ve koşullar içeren yüklemler oluşturmayın. Bu şekilde üretken zamanınızı boşa harcar ve kodu dağınık hale getirirsiniz.
  • Test edilebilirliği sağlamak için yüklemleri uygulama kodundan ayırın. Bunun dışında, bir yüklem birimi test programı oluşturun ve buna bağlı kalın.
  • Sınıflarınızın şişirilmediğinden ve kolayca yönetilebildiğinden emin olmak için içe aktarma ve kompozisyon kalıplarını kullanın.
  • Java yüklemlerini Yardımcı sınıflara taşımayı düşünün — bu şekilde, kodunuzun yeniden kullanılabilirliğini artırır ve bakımı kolaylaştırırsınız.
  • Okunabilirlik — mümkün olduğunda, karmaşık yüklemler yerine tek satırlık ifadeleri tercih edin. Karmaşık fonksiyonel arayüzler hakkındaki anlayışınızı göstermek cazip gelebilir. Ancak, bakım söz konusu olduğunda, daha azı daha fazladır.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION