最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Java8新特性Predicate接口

 更新時(shí)間:2021年05月12日 08:46:00   作者:貓巳  
這篇文章主要介紹了淺談Java8新特性Predicate接口,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

一、前言

Java 8中引入了Predicate功能接口。

Java Predicate表示一個(gè)參數(shù)的謂詞。

Predicate是一個(gè)布爾值的函數(shù)。

Java Predicate是一個(gè)功能接口,屬于java.util.function包。

Predicate的功能方法是test(T t)。

Predicate的其他方法是testisEqual、and、ornegatenot。

not方法在Java 11中被引入。

在本文章,我們將提供Predicate的例子及其所有方法。

二、test(T t)

boolean test(T t) 

testPredicate的功能方法。它在給定的參數(shù)上評(píng)估這個(gè)謂詞。

例1:

PredicateTestDemo1.java

import java.util.function.Predicate;
public class PredicateTestDemo1 {
  public static void main(String[] args) {
	// Is username valid
	Predicate<String> isUserNameValid = u -> u != null && u.length() > 5 && u.length() < 10;
	System.out.println(isUserNameValid.test("Mahesh")); //true

	// Is password valid
	Predicate<String> isPasswordValid = p -> p != null && p.length() > 8 && p.length() < 15;
	System.out.println(isPasswordValid.test("Mahesh123")); //true
	
	// Word match
	Predicate<String> isWordMatched = s -> s.startsWith("Mr.");
	System.out.println(isWordMatched.test("Mr. Mahesh")); //true
	
	//Odd numbers
	Predicate<Integer> isEven = n -> n % 2 == 0;
	for(int i = 0 ; i < 5 ; i++) {
	  System.out.println("Is "+ i + " even: " + isEven.test(i));
	}
  }
} 

輸出結(jié)果

true
true
true
Is 0 even: true
Is 1 even: false
Is 2 even: true
Is 3 even: false
Is 4 even: true

例2:

PredicateTestDemo2.java

import java.util.function.Function;
import java.util.function.Predicate;
public class PredicateTestDemo2 {
  public static void main(String[] args){
    Predicate<Student> maleStudent = s-> s.getAge() >= 20 && "male".equals(s.getGender());
    Predicate<Student> femaleStudent = s-> s.getAge() > 18 && "female".equals(s.getGender());
    
    Function<Student,String> maleStyle = s-> "Hi, You are male and age "+s.getAge();
    Function<Student,String> femaleStyle = s-> "Hi, You are female and age "+ s.getAge();
    
    Student s1 = new Student("Gauri", 20,"female");
    if(maleStudent.test(s1)){
        System.out.println(s1.customShow(maleStyle));
    }else if(femaleStudent.test(s1)){
        System.out.println(s1.customShow(femaleStyle));
    }      
  } 

Student.java

import java.util.function.Function;
public class Student {
  private String name;
  private int age;
  private String gender;
  private int marks;
  public Student(String name, int age, String gender){
    this.name = name;	
    this.age = age;
    this.gender = gender;
  }  
  public Student(String name, int age, String gender, int marks){
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.marks = marks;
  }
  public String getName() {
    return name;
  }
  public int getAge() {
    return age;
  }
  public String getGender() {
    return gender;
  }
  public int getMarks() {
    return marks;
  }
  public  String customShow(Function<Student,String> fun){
    return fun.apply(this);
  }
  public String toString(){ 
    return name+" - "+ age +" - "+ gender + " - "+ marks;  
  }  
} 

輸出結(jié)果

Hi, You are female and age 20

三、and(Predicate<? super T> other)

default Predicate<T> and(Predicate<? super T> other) 

andPredicate的默認(rèn)方法,它返回一個(gè)組成的謂詞,表示這個(gè)謂詞和其他謂詞的短路邏輯AND。在評(píng)估組成的謂詞時(shí),如果這個(gè)謂詞是假的,那么其他謂詞將不會(huì)被評(píng)估。在錯(cuò)誤的情況下,如果此謂詞拋出錯(cuò)誤,那么其他謂詞將不會(huì)被評(píng)估。

PredicateAndDemo.java

import java.util.function.Predicate;
public class PredicateAndDemo {
  public static void main(String[] args) {
	Predicate<Student> isMaleStudent = s -> s.getAge() >= 20 && "male".equals(s.getGender());
	Predicate<Student> isFemaleStudent = s -> s.getAge() > 18 && "female".equals(s.getGender());
	Predicate<Student> isStudentPassed = s -> s.getMarks() >= 33;

	// Testing if male student passed.
	Student student1 = new Student("Mahesh", 22, "male", 30);
	Boolean result = isMaleStudent.and(isStudentPassed).test(student1);
	System.out.println(result); //false

	// Testing if female student passed.
	Student student2 = new Student("Gauri", 19, "female", 40);
	result = isFemaleStudent.and(isStudentPassed).test(student2);
	System.out.println(result); //true
  }
} 

輸出

false
true

四、or(Predicate<? super T> other)

default Predicate<T> or(Predicate<? super T> other)

orPredicate的默認(rèn)方法,它返回一個(gè)組成的謂詞,表示此謂詞和其他謂詞的短路邏輯OR。在評(píng)估組成的謂詞時(shí),如果此謂詞為真,那么其他謂詞將不會(huì)被評(píng)估。在錯(cuò)誤的情況下,如果此謂詞拋出錯(cuò)誤,那么其他謂詞將不會(huì)被評(píng)估。

PredicateOrDemo.java

import java.util.function.Predicate;
public class PredicateOrDemo {
  public static void main(String[] args) {
	Predicate<Student> isMaleStudent = s -> s.getAge() >= 20 && "male".equals(s.getGender());
	Predicate<Student> isFemaleStudent = s -> s.getAge() > 18 && "female".equals(s.getGender());
	Predicate<Student> isStudentPassed = s -> s.getMarks() >= 33;

	Student student1 = new Student("Mahesh", 22, "male", 35);
	//Test either male or female student
	Boolean result = isMaleStudent.or(isFemaleStudent).test(student1);
	System.out.println(result); //true
	//Is student passed, too
	result = isMaleStudent.or(isFemaleStudent).and(isStudentPassed).test(student1);
	System.out.println(result); //true
  }
} 

輸出

true
true

五、negate()

default Predicate<T> negate() 

negatePredicate的默認(rèn)方法,它返回一個(gè)表示該謂詞的邏輯否定的謂詞。如果評(píng)估的結(jié)果是真的,negate將使它變成假的,如果評(píng)估的結(jié)果是假的,negate將使它變成真的。

PredicateNegateDemo.java

import java.util.function.Predicate;
public class PredicateNegateDemo {
  public static void main(String[] args) {
       Predicate<Integer> isNumberMatched = n -> n > 10 && n < 20;
       //With negate()
       Boolean result = isNumberMatched.negate().test(15);
       System.out.println(result); //false
       
       //Without negate()
       result = isNumberMatched.test(15);
       System.out.println(result); //true
       
       Predicate<String> isValidName = s -> s.length() > 5 && s.length() < 15;
       System.out.println(isValidName.negate().test("Krishna")); //false
       
       Predicate<Integer> isLessThan50 = n -> n < 50;
       System.out.println(isLessThan50.negate().test(60)); //true
       
       Predicate<Integer> isGreaterThan20 = n -> n > 20;
       System.out.println(isGreaterThan20.negate().test(30));  //false   
       
       result = isLessThan50.and(isGreaterThan20).negate().test(25);
       System.out.println(result); //false
  }
} 

輸出

false
true
false
true
false
false

六、isEqual(Object targetRef)

static <T> Predicate<T> isEqual(Object targetRef) 

isEqualPredicate的靜態(tài)方法,它返回測(cè)試兩個(gè)參數(shù)是否等于Objects.equals(Object, Object)的謂詞。我們使用Predicate.isEqual創(chuàng)建predicate,如下所示。

Predicate<String> isHelloMsg = Predicate.isEqual("Hello");
Predicate<Book> isMahabharatBook = Predicate.isEqual(new Book("Mahabharat", "Vyas")); 

PredicateIsEqualDemo.java

import java.util.function.Predicate;
public class PredicateIsEqualDemo {
  public static void main(String[] args) {
    System.out.println("---Testing Hello message---");	
    Predicate<String> isHelloMsg = Predicate.isEqual("Hello");
    System.out.println(isHelloMsg.test("Hello")); //true
    System.out.println(isHelloMsg.test("Hi"));  //false
    
    System.out.println("---Testing Mahabharat book---");
    Book mahabharatBook = new Book("Mahabharat", "Vyas");
    Predicate<Book> isMahabharatBook = Predicate.isEqual(mahabharatBook);
    System.out.println(isMahabharatBook.test(new Book("Mahabharat", "Vyas"))); //true
    System.out.println(isMahabharatBook.test(new Book("Ramayan", "Valmiki"))); //false
  }
}

class Book {
  private String name;
  private String writer;
  public Book(String name, String writer) {
	this.name = name;
	this.writer = writer;
  }
  public String getName() {
    return name;
  }
  public String getWriter() {
    return writer;
  }
  public boolean equals(final Object obj) {
    if (obj == null) {
        return false;
    }
    final Book b = (Book) obj;
    if (this == b) {
        return true;
    } else {
        return (this.name.equals(b.name) && (this.writer == b.writer));
    }
  }  
} 

輸出

---Testing Hello message---
true
false
---Testing Mahabharat book---
true
false

七、not(Predicate<? super T> target)

static <T> Predicate<T> not(Predicate<? super T> target) 

notJava 11中引入的Predicate的靜態(tài)方法。

not返回的predicate是對(duì)所提供的predicate的否定。

這是通過返回調(diào)用target.negate()的結(jié)果來完成的。

找到Predicate.not的例子。

PredicateNotDemo.java

import java.util.function.Predicate;
public class PredicateNotDemo {
  public static void main(String[] args) {
    Predicate<Integer> isOdd = n -> n % 2 == 1;
    Predicate<Integer> isEven = Predicate.not(isOdd);
    System.out.println(isEven.test(10)); //true
    
    Predicate<String> isNotHelloMsg = Predicate.not(Predicate.isEqual("Hello"));
    System.out.println(isNotHelloMsg.test("Hi")); //true
    System.out.println(isNotHelloMsg.test("Hello")); //false
  }
} 

輸出

true
true
false

在Stream中使用Predicate 

我們將提供例子在Stream中使用Predicate。

我們將使用Stream.filter來過濾列表。

filter()的語法如下。

filter(Predicate predicate)

filter()在處理給定的Predicate后,返回由過濾后的數(shù)據(jù)組成的Stream實(shí)例。

例1:

PredicateStreamDemo1.java

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
public class PredicateStreamDemo1 {
  public static void main(String[] args) {
	List<String> list = new ArrayList<>();	
	list.add("Vijay");
	list.add("Ramesh");
	list.add("Mahesh");
	
	Predicate<String> isNameEndsWithSh = s -> s.endsWith("sh");
	
	list.stream().filter(isNameEndsWithSh)
	  .forEach(s -> System.out.println(s));
  }
} 

輸出

Ramesh
Mahesh

例2:

PredicateStreamDemo2.java

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class PredicateStreamDemo2 {
  public static void main(String[] args) {
	List<Student> list = new ArrayList<>();
	list.add(new Student("Mahesh", 20, "male", 38));
	list.add(new Student("Gauri", 21, "female", 45));	
	list.add(new Student("Krishna", 19, "male", 42));
	list.add(new Student("Radha", 20, "female", 35));
	
	System.out.println("--- All students scoring marks > 40 ---");
	Predicate<Student> isScoreGt40 = std -> std.getMarks() > 40;
	filterStudent(isScoreGt40, list).forEach(s -> System.out.println(s));
	
	System.out.println("--- All Male Students ---");
	Predicate<Student> isMaleStudent = std -> "male".equals(std.getGender());
	filterStudent(isMaleStudent, list).forEach(s -> System.out.println(s));
	
	System.out.println("--- All Female Students ---");
	Predicate<Student> isFemaleStudent = std -> "female".equals(std.getGender());
	filterStudent(isFemaleStudent, list).forEach(s -> System.out.println(s));	
	
	System.out.println("--- All Female Students scoring > 40 ---");
	filterStudent(isFemaleStudent.and(isScoreGt40), list).forEach(s -> System.out.println(s));		
  }
  
  static List<Student> filterStudent(Predicate<Student> predicate, List<Student> list) {
	return list.stream().filter(predicate).collect(Collectors.toList());
  }
} 

輸出

--- All students scoring marks > 40 ---
Gauri - 21 - female - 45
Krishna - 19 - male - 42
--- All Male Students ---
Mahesh - 20 - male - 38
Krishna - 19 - male - 42
--- All Female Students ---
Gauri - 21 - female - 45
Radha - 20 - female - 35
--- All Female Students scoring > 40 ---
Gauri - 21 - female - 45

到此這篇關(guān)于淺談Java8新特性Predicate接口的文章就介紹到這了,更多相關(guān)Java Predicate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析Java中的Field類和Method類

    解析Java中的Field類和Method類

    這篇文章主要介紹了Java中的Field類和Method類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-12
  • java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解

    java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解

    這篇文章主要介紹了java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 快速入門HarmonyOS的Java UI框架的教程

    快速入門HarmonyOS的Java UI框架的教程

    這篇文章主要介紹了快速入門HarmonyOS的Java UI框架,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 在Spring中利用@Order注解對(duì)bean和依賴進(jìn)行排序

    在Spring中利用@Order注解對(duì)bean和依賴進(jìn)行排序

    在Spring框架中,@Order是一個(gè)經(jīng)常被忽視但非常重要的注解,在項(xiàng)目開發(fā)中,當(dāng)我們需要維護(hù)bean的特定順序或者存在許多相同類型的bean時(shí),這個(gè)注解就發(fā)揮了作用,這篇文章講的就是如何利用@Order注解對(duì)bean和依賴進(jìn)行排序,需要的朋友可以參考下
    2023-11-11
  • SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    在我們平時(shí)開發(fā)中,dto、vo、entity之間的相互轉(zhuǎn)換是很頻繁的操作,這篇文章就簡(jiǎn)單記錄一下在平時(shí)開發(fā)中SpringBoot的轉(zhuǎn)換方法,希望對(duì)大家有所幫助
    2025-01-01
  • 教你怎么用Java獲取國(guó)家法定節(jié)假日

    教你怎么用Java獲取國(guó)家法定節(jié)假日

    這篇文章主要介紹了教你怎么用Java獲取國(guó)家法定節(jié)假日,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java動(dòng)態(tài)添加view的方法

    Java動(dòng)態(tài)添加view的方法

    這篇文章主要介紹了Java動(dòng)態(tài)添加view的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過程解析

    Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Mybatis-plus數(shù)據(jù)權(quán)限D(zhuǎn)ataPermissionInterceptor實(shí)現(xiàn)

    Mybatis-plus數(shù)據(jù)權(quán)限D(zhuǎn)ataPermissionInterceptor實(shí)現(xiàn)

    本文主要介紹了Mybatis-plus數(shù)據(jù)權(quán)限D(zhuǎn)ataPermissionInterceptor實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Collections.shuffle()方法實(shí)例解析

    Collections.shuffle()方法實(shí)例解析

    這篇文章主要介紹了Collections.shuffle()方法實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

丰都县| 长葛市| 宜宾县| 望都县| 正蓝旗| 西充县| 卓资县| 防城港市| 达孜县| 鄂伦春自治旗| 沂南县| 乌拉特中旗| 白朗县| 岑溪市| 基隆市| 秦皇岛市| 平罗县| 临邑县| 盖州市| 蓬溪县| 郓城县| 桑日县| 瑞丽市| 兴隆县| 邯郸市| 麦盖提县| 涟源市| 武山县| 台安县| 陈巴尔虎旗| 错那县| 屯昌县| 奉化市| 塔城市| 扶余县| 江华| 启东市| 额敏县| 惠来县| 鲁山县| 高清|