当前位置: 代码网 > it编程>编程语言>Java > java中处理stream.filter()的实例代码

java中处理stream.filter()的实例代码

2024年08月21日 Java 我要评论
前言在java中,stream.filter方法用于对流中的元素进行筛选。filter方法接受一个predicate(一个返回布尔值的函数),然后返回一个包含所有匹配元素的新流。使用场景假设有一个包含

前言

在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操作(如mapreduce)与filter结合进行复杂的数据处理。

b. 实现自定义predicate来筛选更复杂的条件。

到此这篇关于java中处理stream.filter()的文章就介绍到这了,更多相关java处理stream.filter()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com