Java8函數(shù)式接口Predicate用法示例詳解
Java8函數(shù)式接口Predicate用法
在Java 8中,Predicate<T>是一個函數(shù)式接口,用于對某個類型的對象進(jìn)行條件判斷,返回一個布爾值。
Predicate<T>接口定義
@FunctionalInterface public interface Predicate<T> { boolean test(T t); }
Predicate<T>接口只有一個抽象方法 test,該方法接受一個泛型參數(shù)并返回一個布爾值。你可以使用Lambda表達(dá)式或方法引用來實(shí)現(xiàn) Predicate<T> 接口,根據(jù)自己的需求編寫條件判斷代碼。
Predicate<T> 簡單示例
Predicate<Integer> isEven = num -> num % 2 == 0; System.out.println(isEven.test(4)); // 輸出: true System.out.println(isEven.test(7)); // 輸出: false
上述示例創(chuàng)建了一個用于判斷一個整數(shù)是否為偶數(shù)的 Predicate<Integer> 對象 isEven。通過調(diào)用 test 方法,你可以傳入一個整數(shù),然后得到對應(yīng)的布爾值結(jié)果。
Predicate<T> 接口還可以與其他函數(shù)式接口結(jié)合使用,如 filter 方法配合 Stream 使用,進(jìn)行元素的過濾操作。
Predicate<T> 元素過濾
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class PredicateExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Predicate<Integer> isEven = num -> num % 2 == 0; Predicate<Integer> isGreaterThan5 = num -> num > 5; List<Integer> filteredNumbers = numbers.stream() .filter(isEven.and(isGreaterThan5)) .collect(Collectors.toList()); System.out.println(filteredNumbers); // 輸出: [6, 8, 10] } }
在上述示例中,我們使用 filter 方法結(jié)合 Predicate<T> 對流中的元素進(jìn)行過濾,只保留了偶數(shù)。最終將結(jié)果收集到一個新的列表中。
Predicate<T> 接口提供默認(rèn)方法
如 and、or、negate,用于進(jìn)行條件的組合、取反等操作。
以下是三個默認(rèn)方法的說明和示例:
1. and(Predicate<? super T> other)
返回一個組合判斷條件,要同時滿足當(dāng)前條件和傳入的另一個條件。
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = num -> num % 2 == 0; Predicate<Integer> isGreaterThan5 = num -> num > 5; Predicate<Integer> isEvenAndGreaterThan5 = isEven.and(isGreaterThan5); System.out.println(isEvenAndGreaterThan5.test(6)); // 輸出: true System.out.println(isEvenAndGreaterThan5.test(3)); // 輸出: false } }
上述示例中,我們創(chuàng)建了兩個 Predicate<Integer> 對象 isEven 和 isGreaterThan5,分別用于判斷數(shù)字是否為偶數(shù)和是否大于5。然后我們使用 and 方法將這兩個條件進(jìn)行邏輯與操作,生成了一個新的 Predicate<Integer> 對象 isEvenAndGreaterThan5。通過調(diào)用 test 方法,我們可以檢查一個數(shù)字是否同時滿足偶數(shù)和大于5的條件。
2. or(Predicate<? super T> other)
返回一個組合判斷條件,滿足當(dāng)前條件或者傳入的另一個條件即可。
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = num -> num % 2 == 0; Predicate<Integer> isGreaterThan5 = num -> num > 5; Predicate<Integer> isEvenOrGreaterThan5 = isEven.or(isGreaterThan5); System.out.println(isEvenOrGreaterThan5.test(4)); // 輸出: true System.out.println(isEvenOrGreaterThan5.test(7)); // 輸出: true System.out.println(isEvenOrGreaterThan5.test(3)); // 輸出: false } }
在上述示例中,我們使用 or 方法將 isEven 和 isGreaterThan5 這兩個條件進(jìn)行邏輯或操作,生成了一個新的 Predicate<Integer> 對象 isEvenOrGreaterThan5。通過調(diào)用 test 方法,我們可以檢查一個數(shù)字是否滿足偶數(shù)或者大于5的條件。
3. negate()
返回當(dāng)前判斷條件的取反條件。
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = num -> num % 2 == 0; Predicate<Integer> isNotEven = isEven.negate(); System.out.println(isNotEven.test(3)); // 輸出: true System.out.println(isNotEven.test(4)); // 輸出: false } }
在上述示例中,我們使用 negate 方法對 isEven 條件進(jìn)行取反操作,生成了一個新的 Predicate<Integer> 對象 isNotEven。通過調(diào)用 test 方法,我們可以檢查一個數(shù)字是否不滿足偶數(shù)的條件。
以上就是Java8函數(shù)式接口Predicate用法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java8函數(shù)式接口Predicate的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java基于遞歸和循環(huán)兩種方式實(shí)現(xiàn)未知維度集合的笛卡爾積算法示例
這篇文章主要介紹了Java基于遞歸和循環(huán)兩種方式實(shí)現(xiàn)未知維度集合的笛卡爾積算法,結(jié)合實(shí)例形式分析了Java使用遞歸與循環(huán)兩種方式實(shí)現(xiàn)未知維度集合的笛卡爾積相關(guān)概念、原理與操作技巧,需要的朋友可以參考下2017-12-12Dubbo?LoadBalance基于權(quán)重的隨機(jī)負(fù)載均衡算法提高服務(wù)性能
這篇文章主要為大家介紹了Dubbo?LoadBalance基于權(quán)重的隨機(jī)負(fù)載均衡算法提高服務(wù)性能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-10-10Springboot中@Transactional注解與異常處理機(jī)制方式
這篇文章主要介紹了Springboot中@Transactional注解與異常處理機(jī)制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Java聊天室之使用Socket實(shí)現(xiàn)傳遞對象
這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之使用Socket實(shí)現(xiàn)傳遞對象功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以了解一下2022-10-10