java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java Predicate过滤集合中元素

Java使用Predicate过滤集合中的元素的操作方法

作者:Cache技术分享

文章介绍了Java 8中Collection接口新增的removeIf方法,该方法允许通过Predicate条件快速移除集合中不符合条件的元素,与传统使用Iterator和remove()方法相比,removeIf方法更加简洁和易读,文章还提供了使用removeIf方法的示例,需要的朋友可以参考下

前言

Java SE 8 开始,Collection 接口新增了一个非常实用的方法: 👉 removeIf(Predicate<? super E> filter)

这个方法允许你通过一个条件判断(Predicate),快速、简洁地移除集合中不符合条件的元素

传统做法(Java 7及之前)

以前在 Java 7 或更早的版本中,我们要删除集合中的元素,必须使用 Iterator 配合 remove()

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

💬 问题: 这种写法虽然可以,但又啰嗦又容易出错(比如忘记正确使用 iterator.remove())。

新时代做法:使用 removeIf()

现在只需要一句话,就可以优雅地实现同样的功能!

示例:过滤掉 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;
        
        // 组合多个条件
        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个字符,不会被删
        strings.add(null);

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

        strings.removeIf(shouldRemove);

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

输出结果

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

细节解释

另外一些常见用法示例

1. 删除所有偶数

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]

小结

优点解释
简洁清晰比传统的 Iterator 写法短很多
可读性好业务逻辑(过滤条件)和代码结构分离,易于理解
支持组合通过 and(), or(), negate() 灵活组合多个条件

以上就是Java使用Predicate过滤集合中的元素的操作方法的详细内容,更多关于Java Predicate过滤集合中元素的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文