Java中使用Stream API的filter方法可对集合进行函数式过滤,返回满足条件的新集合。首先调用stream()方法获取流,接着通过filter()传入Predicate类型的Lambda表达式定义过滤条件,最后用collect()将结果收集为List、Set或数组等类型。例如可过滤字符串长度大于3的元素,或筛选年龄大于等于18的用户对象。支持组合多个条件,使用&&或拆分多个filter提升可读性。还能转换为Set去重或转为数组。原集合不变,始终返回新集合。掌握stream + filter + collect组合即可高效处理常见过滤需求。

在Java中,可以通过Stream API的filter方法对集合进行过滤,并返回一个新的集合。这种方式简洁、函数式,适用于List、Set等常见集合类型。
使用Stream.filter()过滤并收集结果
调用集合的stream()方法,然后使用filter()传入一个Lambda表达式定义过滤条件,最后通过collect()将结果转换为新的集合。
filter接收一个Predicate(返回boolean的函数)作为参数 只有满足条件的元素才会保留在流中 collect负责将流中的元素重新封装成List、Set等集合类型
示例:过滤出长度大于3的字符串
List words = Arrays.asList("java", "go", "rust", "c++", "python");List result = words.stream() .filter(s -> s.length() > 3) .collect(Collectors.toList());System.out.println(result); // 输出: [java, rust, python]
过滤对象集合
常用于根据对象属性进行筛选,比如过滤年龄大于18的用户。
立即学习“Java免费学习笔记(深入)”;
class User { String name; int age; User(String name, int age) { this.name = name; this.age = age; } // getter方法 public int getAge() { return age; }}List users = Arrays.asList( new User("Alice", 25), new User("Bob", 17), new User("Charlie", 30));List adults = users.stream() .filter(u -> u.getAge() >= 18) .collect(Collectors.toList());
组合多个过滤条件
可以在filter中使用逻辑运算符组合多个条件。
List result = users.stream() .filter(u -> u.getAge() >= 18 && u.getName().startsWith("A")) .collect(Collectors.toList());
也可以拆分成多个filter调用,提高可读性:
List result = users.stream() .filter(u -> u.getAge() >= 18) .filter(u -> u.getName().length() > 4) .collect(Collectors.toList());
返回其他集合类型
除了List,还可以轻松转为Set或Array。
// 转为Set避免重复Set unique = words.stream() .filter(s -> s.contains("a")) .collect(Collectors.toSet());// 转为数组String[] array = words.stream() .filter(s -> s.length() > 4) .toArray(String[]::new);
基本上就这些。只要掌握stream + filter + collect这个组合,就能高效处理大多数集合过滤场景。注意原集合不会被修改,返回的是全新集合。
以上就是在Java中如何通过filter过滤并返回新的集合的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/199168.html
微信扫一扫
支付宝扫一扫