You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java 8 Stream按自定义条件(会话中/活跃)从另一列表创建对象列表

使用Java 8 Stream实现Person到UserInfo的转换(满足会话/活跃条件)

没问题,这就给你一个简洁高效的Java 8 Stream实现方案。首先要说明的是,你的Person类定义里没包含「会话状态」和「活跃状态」的字段/方法,我这里默认Person类有两个布尔类型的方法:isInSession()和isActive(),用来判断这两个条件——如果实际字段名不同,你替换成对应的getter就行。

完整实现代码

import java.util.List;
import java.util.stream.Collectors;

public class PersonToUserInfoConverter {
    public List<UserInfo> convertToUserInfos(List<Person> persons) {
        return persons.stream()
                // 过滤:保留处于会话中 或者 活跃状态的Person
                .filter(person -> person.isInSession() || person.isActive())
                // 映射:将符合条件的Person转换为UserInfo对象
                .map(person -> new UserInfo(
                        person.getFirstName(),
                        person.getLastName(),
                        person.getPersonId()
                ))
                // 收集结果为UserInfo列表
                .collect(Collectors.toList());
    }
}

关键环节拆解

  • 过滤环节:filter()方法接收一个Predicate,这里用Lambda表达式判断当前Person是否满足「会话中」或「活跃」的任一条件,不符合的会被直接排除在后续流处理之外。
  • 映射环节:map()方法负责类型转换,这里直接调用UserInfo的全参构造器,把Person的对应属性(通过getter获取)传入,完成从Person到UserInfo的转换。如果你的UserInfo没有对应全参构造器,也可以改用链式调用setter的方式:
    .map(person -> {
        UserInfo userInfo = new UserInfo();
        userInfo.setUFirstName(person.getFirstName());
        userInfo.setULastName(person.getLastName());
        userInfo.setUserId(person.getPersonId());
        return userInfo;
    })
    
  • 收集结果:collect(Collectors.toList())把流中的UserInfo对象收集成一个List返回,这是Stream处理的收尾步骤。

额外说明

这个实现完全符合Java 8的函数式编程风格,代码简洁易读,而且Stream会自动处理空列表的情况——如果传入的persons列表为空,会直接返回一个空的UserInfo列表,不需要额外的空判断。

内容的提问来源于stack exchange,提问作者Srinivas Lakshman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:02:02