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

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

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

前言

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

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

傳統(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、空字符串、長(zhǎng)度大于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"); // 長(zhǎng)度大于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; ?? 判斷字符串是否為空(即長(zhǎng)度為0)。
  • Predicate<String> isTooLong = s -> s.length() > 5; ?? 判斷字符串長(zhǎng)度是否大于5。
  • isNull.or(isEmpty).or(isTooLong) ?? 通過 or 方法把多個(gè)判斷條件組合起來(lái)
  • 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)解釋
簡(jiǎ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)論

湟中县| 永年县| 白玉县| 六枝特区| 丹阳市| 岐山县| 本溪市| 巫溪县| 山西省| 鹰潭市| 平阴县| 长沙县| 鞍山市| 东方市| 横山县| 越西县| 崇左市| 新龙县| 蓬溪县| 驻马店市| 临湘市| 临沭县| 邻水| 高州市| 阆中市| 苏尼特右旗| 鲁山县| 宁津县| 正宁县| 云南省| 河北区| 老河口市| 佛山市| 荃湾区| 莱芜市| 河北省| 漯河市| 阜新市| 明光市| 湘乡市| 南城县|