前言
在java中,stream.filter方法用于对流中的元素进行筛选。filter方法接受一个predicate(一个返回布尔值的函数),然后返回一个包含所有匹配元素的新流。
使用场景
假设有一个包含多个元素的集合,需要对其中的元素进行筛选,只保留满足特定条件的元素。
示例代码
以下是一些使用stream.filter方法的示例:
1. 过滤列表中的偶数
import java.util.arrays;
import java.util.list;
import java.util.stream.collectors;
public class filterexample {
public static void main(string[] args) {
list<integer> numbers = arrays.aslist(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list<integer> evennumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(collectors.tolist());
system.out.println(evennumbers); // 输出: [2, 4, 6, 8, 10]
}
}
2. 过滤包含特定字符串的字符串列表
import java.util.arrays;
import java.util.list;
import java.util.stream.collectors;
public class filterexample {
public static void main(string[] args) {
list<string> words = arrays.aslist("apple", "banana", "cherry", "date", "fig", "grape");
list<string> filteredwords = words.stream()
.filter(word -> word.contains("a"))
.collect(collectors.tolist());
system.out.println(filteredwords); // 输出: [apple, banana, grape]
}
}
3. 过滤对象列表
假设有一个person类,并希望过滤出年龄大于18岁的人。
import java.util.arrays;
import java.util.list;
import java.util.stream.collectors;
class person {
private string name;
private int age;
public person(string name, int age) {
this.name = name;
this.age = age;
}
public int getage() {
return age;
}
public string getname() {
return name;
}
@override
public string tostring() {
return "person{name='" + name + "', age=" + age + "}";
}
}
public class filterexample {
public static void main(string[] args) {
list<person> people = arrays.aslist(
new person("john", 20),
new person("jane", 17),
new person("tom", 25),
new person("lucy", 15)
);
list<person> adults = people.stream()
.filter(person -> person.getage() > 18)
.collect(collectors.tolist());
adults.foreach(system.out::println);
// 输出:
// person{name='john', age=20}
// person{name='tom', age=25}
}
}
说明
stream():将集合转换为流。filter(predicate):过滤流中的元素,保留满足条件的元素。collect(collectors.tolist()):将流转换回列表。
使用predicate接口
predicate是一个函数式接口,定义了一个test方法,用于对给定的输入进行评估。
可以创建自定义的predicate,如下所示:
import java.util.function.predicate;
public class custompredicateexample {
public static void main(string[] args) {
predicate<integer> iseven = n -> n % 2 == 0;
predicate<integer> ispositive = n -> n > 0;
boolean result1 = iseven.test(4); // true
boolean result2 = ispositive.test(-1); // false
system.out.println(result1); // 输出: true
system.out.println(result2); // 输出: false
}
}
总结
stream.filter是java stream api中的一个强大工具,可以简洁地对集合进行筛选操作。通过结合使用lambda表达式和predicate接口,可以方便地创建各种筛选条件。
下一步建议:
a. 使用其他stream操作(如map、reduce)与filter结合进行复杂的数据处理。
b. 实现自定义predicate来筛选更复杂的条件。
到此这篇关于java中处理stream.filter()的文章就介绍到这了,更多相关java处理stream.filter()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论