CodeGym /جاوا بلاگ /Random-SD /Java Predicate مثالن سان
John Squirrels
سطح
San Francisco

Java Predicate مثالن سان

گروپ ۾ شايع ٿيل
عام طور تي اڳڪٿي جو مطلب آهي هڪ بيان جيڪو اهو طئي ڪري ٿو ته ڇا قيمت صحيح يا غلط ٿي سگهي ٿي. پروگرامنگ ۾ اڳڪٿين جو مطلب هڪ دليل سان فنڪشن آهي جيڪو هڪ بوليان قدر واپس ڪري ٿو. فنڪشنل انٽرفيس اڳڪٿي جاوا 8 ۾ محسوس ڪيو ويو. ”فنڪشنل“ جو مطلب آهي ته ان ۾ صرف هڪ خلاصو طريقو آهي. اهو هڪ دليل قبول ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو. جاوا ۾، فنڪشنل انٽرفيس استعمال ڪيا ويندا آهن ليمبڊا ايڪسپريسز، ڪنسٽرڪٽرز، ۽ ميٿڊ ريفرنسز کي سنڀالڻ لاءِ. عام طور تي Java 8 Predicate استعمال ڪيو ويندو آهي فلٽر لاڳو ڪرڻ لاءِ شين جي مجموعي لاءِ. اچو ته ان جي مکيه ايپليڪيشنن ۽ وڏي پيماني تي استعمال ٿيل طريقن تي هڪ نظر رکون، انهي سان گڏ ڪجهه عملي مسئلا حل ڪريو. Java Predicate مثالن سان - 1

ڇو ڊولپر استعمال ڪندا Predicate

بنيادي طور تي، ڊولپر استعمال ڪري سگھن ٿا اڳڪٿيون ڪنهن به ڪم لاءِ جنهن ۾ شامل ڪيل شيون اڳواٽ بيان ڪيل معيار جي بنياد تي جائزو وٺڻ ۽ بوليان قدر واپس ڪرڻ شامل آهن. هتي سادو ڪمن جا مثال آهن ڊولپرز اڳڪٿيون استعمال ڪندي سنڀاليندا آهن:
  • انٽيجرز جو هڪ سيٽ فلٽر ڪرڻ.
  • فهرستن کي ترتيب ڏيڻ کي يقيني بڻائڻ ته ڊيٽا ڪيترن ئي اڳواٽ بيان ڪيل شرطن سان مطابقت رکي ٿي (مثال طور قيمت ۽ وزن جي شرطن کي ترتيب ڏيندي شين جي هڪ حد کي ترتيب ڏيڻ).
  • سمورو پروگرامنگ ۾ يوٽيلٽي پيڪيجز استعمال ڪرڻ.
اڳڪٿيون سافٽ ويئر ٽيسٽ ۾ هڪ اهم خصوصيت آهن. فنڪشنل انٽرفيس ان کي آسان بڻائي ٿو جدا جدا يونٽن کي ٽيسٽ لاءِ، بهتر بڻائي ٿو پڙهڻ جي صلاحيت ۽ ايپ ڪوڊ جي انتظام کي.

جاوا ۾ اڳڪٿي نحو

java.util.function.Predicate جاوا 8 ۾ متعارف ڪرايو ويو متبادل طريقي جي طور تي ليمبڊا ۾ تشخيصي تاثرات کي سنڀالڻ لاءِ. انٽرفيس جو معياري ڏيک آهي Predicate<T> ، جتي T هڪ واحد دليل آهي جيڪو هڪ بوليان قدر موٽائي ٿو. جاوا پريڊيڪٽس وٽ هڪ فنڪشنل (خلاصي) طريقو ٽيسٽ (آبجڪٽ) آهي جيڪو ڪنهن ڏنل اعتراض تي هن اڳڪٿي جو جائزو وٺندو آهي.
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
هتي هڪ سادي پريڊيڪيٽ لکڻ جو هڪ مثال آهي جيڪو فلٽر ڪري ٿو انگن اکرن کي شرطن جي بنياد تي “وڌيڪ کان”، “گهٽ کان گهٽ”.
// 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. ھڪڙو وڌيڪ مثال Predicate in filter() سان . Predicate سڀني بالغن کي عمر جي فهرست مان فلٽر ڪرڻ ۾ مدد ڪري ٿي.
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;
      }
  }
پيداوار آهي:
18 19 28 18 28 46 21

جاوا 8 اڳڪٿي جا طريقا

Predicate انٽرفيس وٽ ڪيترائي طريقا آھن.
  • بوليان ٽيسٽ (T t) ڏنل دليل تي اڳڪٿي جو اندازو لڳائي ٿو.
  • ڊفالٽ Predicate<T> ۽ (Predicate<? super T> other) هڪ پيشڪش واپس ڏئي ٿو جيڪو هڪ مختصر-Circuiting منطقي AND جي نمائندگي ڪري ٿو هن اڳڪٿي ۽ ٻيو.
  • default Predicate<T> يا ھڪڙي ٺھيل اڳڪٿي کي موٽائي ٿو جيڪو ھڪڙو مختصر-سرڪيوٽنگ منطقي OR ھن اڳڪٿي جي نمائندگي ڪري ٿو ۽ ٻيو.
  • default Predicate<T> negate() هڪ اڳڪٿي ڏئي ٿو جيڪو منطقي طور تي هن اڳڪٿي جي سامهون آهي.
  • ڊفالٽ Predicate<T> isEqual(Object targetRef) ٽيسٽ جو نتيجو ڏئي ٿو جيڪڏهن ٻه دليلون Objects.equals (Object، Object) جي مطابق برابر آهن .

بوليان ٽيسٽ (ٽي ٽي)

هي جاوا جي اڳڪٿين لاءِ هڪ فنڪشنل طريقو آهي جيڪو اندازو لڳائي ٿو ته ڏنل دليل اڳڪٿي جي حالت کي پورو ڪري ٿو يا نه. مثال: هتي اسان هر ڪنهن لاءِ اڳڪٿي ڪندڙ بالغ ٺاهيندا آهيون جنهن جي عمر 18 يا ان کان وڌيڪ آهي. test() طريقو هڪ عددي قدر حاصل ڪري ٿو ۽ ان کي چيڪ ڪري ٿو.
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));
   }
}
مٿي ڏنل ڪوڊ جي پيداوار ڇا ٿيندي؟ پهرين صورت ۾، ڇاڪاڻ ته 12 18 کان گهٽ آهي، اهو غلط ٿيندو. جيئن ته ٻئي ۽ ٽئين منظر نامي لاء، حالتون ملن ٿيون ته واپسي صحيح ٿي ويندي.
ڪوڙ سچ سچ

ڊفالٽ Predicate.and()

اهو طريقو "۽" آپريٽر جي نمائندگي ڪري ٿو. ان ڪري، جيڪڏهن ڏنل پيشڪش مان هڪ هڪ مقرر شرط جي تعميل نه ڪندو آهي، ته ٻيو هڪ تشخيص حاصل نه ڪندو. مثال: اچو ته جاوا ۾ اڳڪٿيون ترتيب ڏيو، انهن سڀني ماڻهن کي فلٽر ڪريون جيڪي اڳ ۾ ئي بالغ آهن پر 65 سالن کان ننڍا آهن ۽ () استعمال ڪندي . اچو ته استعمال ڪريون predicate.add () ۽ انهن شرطن لاءِ lambda سان جاوا predicate لکون: جيڪڏهن شرط صحيح آهي، ايپ هيٺ ڏنل بيان واپس ڪندي:
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));
       }
   }
پيداوار آهي:
ڪوڙ سچ ڪوڙ

ڊفالٽ Predicate.or()

Predicate.or() طريقو "OR" آپريٽر جي نمائندگي ڪري ٿو. مطلب ته حالت صحيح رهندي جيتوڻيڪ ٻن اڳڪٿين مان هڪ سچي هجي ۽ ٻي ڪوڙي هجي. مثال: اچو ته ھاڻي ڪردار جي تارن جو جائزو وٺون. OR طريقو استعمال ڪرڻ جي ڪوشش ڪريو سڀني جملن کي ترتيب ڏيڻ لاءِ جنهن ۾ "منهنجو" يا "ڪرائين" شامل هجي.
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"));
      }
  }
پيداوار آهي:
سچو سچ سچو ڪوڙ

ڊفالٽ Predicate negate()

negate() طريقو سڀني قدرن کي گڏ ڪرڻ لاءِ استعمال ڪيو ويندو آهي جيڪي اڳواٽ بيان ڪيل معيار سان عمل نٿا ڪن. مثال: جيڪڏھن توھان چاھيو ٿا ڪلاس ”ٽماٽو“ جي ذريعي ترتيب ڏيو ۽ ڳولھيو اھي سڀ داخلائون جيڪي ”لال“ نه آھن، توھان لکي سگھوٿا Predicate ۽ جلدي اسڪين ڪري پوري ترتيب ذريعي. ڪوشش ڪريو ھن لاءِ ڪوڊ لکڻ لاءِ پنھنجو پاڻ ۽ ان کي چيڪ ڪريو حل جي خلاف ھڪ دفعو توھان ڪيو.
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))
  }
   }
پيداوار آهي:
سچ ڪوڙ

جامد اڳڪٿي isEqual (Object targetRef)

اهو طريقو انتهائي مفيد آهي جيڪڏهن توهان اهو طئي ڪرڻ چاهيو ٿا ته ڇا ٻه شيون هڪ قيمت جي برابر آهن جيڪي Objects.equals(). اهو طريقو خاص طور تي ڪارائتو آهي جيڪڏهن توهان کي ساڳئي جاچ جا نتيجا موازنہ ڪرڻ جي ضرورت آهي. مثال: اچو ته چئو ته توهان ناشپاتيءَ جي ٻن گاڏين جو مقابلو ڪري رهيا آهيو ۽ پڪ ڪرڻ چاهيو ٿا ته ٻنهي جو ميوو معياري وزن ۽ رنگ جو آهي. انهي حالت ۾، جامد پيشڪش isEqual(Object targetRef) بلڪل اهو طريقو آهي جيڪو توهان کي گهربل آهي. اچو ته هڪ نظر رکون ته ڪيئن isEqual ٻن تارن جي برابري کي چيڪ ڪري ٿو:
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"));
   }
}
جيڪڏهن هڪ شئي جو توهان تجزيو ڪري رهيا آهيو معياري شرطن جي تعميل ڪري، فنڪشن صحيح موٽندي. پيداوار آهي:
ڪوڙ سچ

Java IntPredicate

Java IntPredicate ھڪڙو فنڪشنل انٽرفيس آھي، تنھنڪري توھان ان کي استعمال ڪري سگھوٿا اسائنمنٽ ھدف لاءِ ليمبڊا ايڪسپريشن يا طريقي جي حوالي سان. IntPredicate هڪ انٽيجر تي هلندي آهي ۽ هڪ شرط جي بنياد تي هڪ اڳڪٿي قدر واپس ڪري ٿو. جيئن ته Predicate انٽرفيس، IntPredicate وٽ پڻ ٽيسٽ() ، ۽() ، negate() ، or() طريقا آهن. هتي جو هڪ مثال آهي IntPredicate. اهو پڻ سڀني بالغن کي فلٽر ڪري ٿو (18 يا وڌيڪ) صف کان.
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);
   }
}
پيداوار آهي:
18 28 18 46 90 45 21

جاوا ۾ صاف اڳڪٿيون لکڻ

جاوا پيشڪش انتهائي ڪارائتو ۽ ڪم ڪرڻ لاءِ مزيدار آهن. تنهن هوندي، جيستائين توهان ذهن ۾ نه آهيو ته توهان ڪيئن لکندا آهيو ليمبڊا ايڪسپريسز ڪوڊ تي اثرانداز ٿين ٿا، اتي گندي اڳڪٿين سان ڪوڊ برقرار رکڻ کي گهٽائڻ جو خطرو آهي. هتي ڪجھ سادو طريقا آهن جيڪي توهان کي يقيني بڻائڻ ۾ مدد ڏين ٿيون ته توهان جا فنڪشنل انٽرفيس منظم ڪرڻ ۽ پڙهڻ ۾ آسان آهن.
  • پنهنجو پاڻ کي نه ورجايو - جاوا سان اڳڪٿيون نه ٺهيو، بار بار ويل ويلز، طريقن ۽ حالتن سان هڪ کان وڌيڪ. اهو طريقو، توهان پنهنجو پيداواري وقت ضايع ڪيو ۽ ڪوڊ کي گندو ٺاهيو.
  • ٽيسٽ جي قابليت کي يقيني بڻائڻ لاءِ ايپ ڪوڊ کان اڳڪٿيون الڳ ڪريو. ان کان سواء، هڪ اڳڪٿي يونٽ ٽيسٽ شيڊول ٺاهيو ۽ ان تي لٺ.
  • درآمدات ۽ ٺاھڻ جا نمونا استعمال ڪريو ان کي يقيني بڻائڻ لاءِ ته توھان جا طبقا ڦاٽا نه آھن ۽ انتظام ڪرڻ ۾ آسان رھو.
  • جاوا جي اڳڪٿين کي مددگار طبقن ڏانهن منتقل ڪرڻ تي غور ڪريو - هن طريقي سان، توهان پنهنجي ڪوڊ جي ٻيهر استعمال کي بهتر بڻائي ۽ سار سنڀال کي آسان بڻائي سگهو ٿا.
  • پڙهڻ جي قابليت - جڏهن به ممڪن هجي، هڪ لائن بيانن کي ترجيح ڏيو پيچيده اڳڪٿين تي. اهو ٿي سگهي ٿو ته توهان جي سمجھڻ کي ڏيکارڻ لاء پرجوش ٿي سگھي ٿو پيچيده فنڪشنل انٽرفيس. تنهن هوندي، جڏهن اهو سار سنڀال لاء اچي ٿو، گهٽ وڌيڪ آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION