开发中常见的Stream流用法

发布于:2025-07-06 ⋅ 阅读:(23) ⋅ 点赞:(0)

开发中常见的Stream流用法

1.收集特定的字段信息

场景1:需要获取所有的合同名称

    private List<String> loadContractNames() {
        // 获取到ContractInfo集合然后进行处理
        List<ContractSelectVo> contractSelectVoList = contractInfoService.getNames();
        return contractSelectVoList.stream()
            // 需要获取的字段
            .map(ContractSelectVo::getContractName)
            // 必要的时候可以用.distinct()  去重
            .toList();
    }

场景2:收集id集合

        // 将id收集放入新的集合
        List<String> ids =agreementInfoDtoList.stream()
            .map(AgreementInfoDto::getId)
            .collect(Collectors.toList());

2.排序

场景:需要排序的场景有很多 希望最新操作的排在最前面 有时候就会用上 .reversed()

说明:也可以在查询的时候直接进行排序

        List<PointInfo> sortedRecords = records.stream()
            // 默认升序排序(从小到大)
            .sorted(Comparator.comparing(PointInfo::getOperationtime)) 
            // 如果需要降序排序,可以链式调用 reversed() 方法
            //.sorted(Comparator.comparing(PointInfo::getOperationtime).reversed())
            .collect(Collectors.toList());
		// 添加按操作时间时间降序排序
        lqw.orderByDesc(PointInfo::getOperationtime);

3.filter里面判空处理

说明:满足 item.getCheckRating() != null 不为空则会被收集起来

防止空指针异常

        List<EvaluationInfoVo> filteredRecords = result.getRecords().stream()
            .filter(item -> item.getCheckRating() != null)
            .collect(Collectors.toList());

4.下拉框返回格式处理

说明:检索条件的时候是以下拉框的形式提供给用户选择,当时与我们前端联调的时候希望返回如下数据格式 (对象中只保留value属性)

image-20250702094214868

@Override
public List<StationSelectVo> getStationList() {
    List<DeviceInfoVo> list = this.queryList(new DeviceInfoBo());
    List<String> values = list.stream().map(DeviceInfoVo::getStation).distinct().toList();
    return values.stream().map(StationSelectVo::new).toList();
}
// 也可也用 @AllArgsConstructor 注解: 生成一个包含所有字段的构造函数。
@Data
public class StationSelectVo {
    private String value;

    public StationSelectVo() {}

    // 全参构造函数
    public StationSelectVo(String value) {
        this.value = value;
    }
}

@Data 注解不会自动生成含参的构造函数

image-20250701152544145

image-20250701152658772

@AllArgsConstructor: 生成一个包含所有字段的构造函数。

网站公告

今日签到

点亮在社区的每一天
去签到