MST

星途 面试题库

面试题:Java Stream peek方法在复杂对象流处理中的应用及与filter的协同

假设有一个自定义类User,包含属性name(字符串类型)和age(整数类型)。现有一个List<User> userList。编写代码使用Stream流,首先通过peek方法记录所有年龄大于30岁的用户信息到日志(仅模拟记录动作,例如打印到控制台),然后使用filter方法过滤出年龄大于30岁的用户,再通过peek方法对过滤后的用户列表进行修改(例如将名字全部转为大写),最后返回修改后的用户列表。阐述在这个过程中peek方法与filter方法如何协同工作以及peek方法在不同阶段的作用。
13.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("Alice", 25));
        userList.add(new User("Bob", 35));
        userList.add(new User("Charlie", 40));

        List<User> resultList = userList.stream()
               .peek(user -> {
                    if (user.getAge() > 30) {
                        System.out.println("Logging user: " + user);
                    }
                })
               .filter(user -> user.getAge() > 30)
               .peek(user -> user.name = user.name.toUpperCase())
               .collect(Collectors.toList());

        System.out.println("Modified user list: " + resultList);
    }
}

peek方法与filter方法的协同工作以及peek方法的作用

  1. 第一个peek方法
    • 作用:在流处理管道的开始阶段,用于记录年龄大于30岁的用户信息。它对每个流经的元素进行操作,这里通过打印信息模拟日志记录动作。此peek方法并不改变流中元素的流向,只是对符合条件(年龄大于30岁)的元素进行额外的操作(打印)。
  2. filter方法
    • 作用:对经过第一个peek方法处理后的流进行过滤,只允许年龄大于30岁的用户通过,将不符合条件的元素从流中移除,从而缩小流中元素的范围,为后续处理准备一个仅包含年龄大于30岁用户的流。
  3. 第二个peek方法
    • 作用:在filter方法过滤后的流上进行操作,对过滤后剩下的(年龄大于30岁)用户列表进行修改,这里将用户名字全部转为大写。此peek方法直接修改了流中的元素,为最终收集到结果列表做准备。

通过这种方式,peek方法和filter方法协同工作,实现了对用户列表的筛选、记录和修改操作。