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

Java使用Predicate過濾集合中的元素的操作方法

 更新時(shí)間:2025年11月07日 08:59:05   作者:Cache技術(shù)分享  
文章介紹了Java 8中Collection接口新增的removeIf方法,該方法允許通過Predicate條件快速移除集合中不符合條件的元素,與傳統(tǒng)使用Iterator和remove()方法相比,removeIf方法更加簡潔和易讀,文章還提供了使用removeIf方法的示例,需要的朋友可以參考下

前言

Java SE 8 開始,Collection 接口新增了一個(gè)非常實(shí)用的方法: ?? removeIf(Predicate<? super E> filter)

這個(gè)方法允許你通過一個(gè)條件判斷(Predicate),快速、簡潔地移除集合中不符合條件的元素。

傳統(tǒng)做法(Java 7及之前)

以前在 Java 7 或更早的版本中,我們要?jiǎng)h除集合中的元素,必須使用 Iterator 配合 remove()

Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
    String s = iterator.next();
    if (s == null || s.isEmpty() || s.length() > 5) {
        iterator.remove();
    }
}

?? 問題: 這種寫法雖然可以,但又啰嗦又容易出錯(cuò)(比如忘記正確使用 iterator.remove())。

新時(shí)代做法:使用 removeIf()

現(xiàn)在只需要一句話,就可以優(yōu)雅地實(shí)現(xiàn)同樣的功能!

示例:過濾掉 null、空字符串、長度大于5的字符串

import java.util.*;
import java.util.function.Predicate;

public class FilterExample {
    public static void main(String[] args) {
        Predicate<String> isNull = Objects::isNull;
        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isTooLong = s -> s.length() > 5;
        
        // 組合多個(gè)條件
        Predicate<String> shouldRemove = isNull.or(isEmpty).or(isTooLong);

        Collection<String> strings = new ArrayList<>();
        strings.add(null);
        strings.add("");
        strings.add("one");
        strings.add("two");
        strings.add("");
        strings.add("three"); // 長度大于5
        strings.add("hello"); // 正好5個(gè)字符,不會(huì)被刪
        strings.add(null);

        System.out.println("Before filtering: " + strings);

        strings.removeIf(shouldRemove);

        System.out.println("After filtering: " + strings);
    }
}

輸出結(jié)果

Before filtering: [null, , one, two, , three, hello, null]
After filtering: [one, two, hello]

細(xì)節(jié)解釋

  • Predicate<String> isNull = Objects::isNull; ?? 創(chuàng)建一個(gè)判斷元素是否為 null 的條件。
  • Predicate<String> isEmpty = String::isEmpty; ?? 判斷字符串是否為空(即長度為0)。
  • Predicate<String> isTooLong = s -> s.length() > 5; ?? 判斷字符串長度是否大于5。
  • isNull.or(isEmpty).or(isTooLong) ?? 通過 or 方法把多個(gè)判斷條件組合起來。
  • removeIf(shouldRemove) ?? 移除所有符合 shouldRemove 這個(gè)條件的元素。

另外一些常見用法示例

1. 刪除所有偶數(shù)

List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6));
numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers);  // 輸出 [1, 3, 5]

2. 移除所有以特定字母開頭的字符串

List<String> names = new ArrayList<>(List.of("Alice", "Bob", "Charlie", "David"));
names.removeIf(name -> name.startsWith("A"));
System.out.println(names);  // 輸出 [Bob, Charlie, David]

小結(jié)

優(yōu)點(diǎn)解釋
簡潔清晰比傳統(tǒng)的 Iterator 寫法短很多
可讀性好業(yè)務(wù)邏輯(過濾條件)和代碼結(jié)構(gòu)分離,易于理解
支持組合通過 and(), or(), negate() 靈活組合多個(gè)條件

以上就是Java使用Predicate過濾集合中的元素的操作方法的詳細(xì)內(nèi)容,更多關(guān)于Java Predicate過濾集合中元素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

沛县| 怀集县| 彝良县| 肃南| 永新县| 达孜县| 沅江市| 瑞安市| 诏安县| 二手房| 龙陵县| 平舆县| 松滋市| 承德市| 潜江市| 五原县| 荆州市| 区。| 泰州市| 东山县| 东莞市| 元江| 旌德县| 福海县| 崇文区| 诸暨市| 丹江口市| 安康市| 墨玉县| 青铜峡市| 余干县| 海林市| 宜昌市| 日照市| 新化县| 故城县| 巧家县| 安福县| 麟游县| 安顺市| 汪清县|