【java中使用stream处理list数据提取其中的某个字段,并由List<String>转为List<Long>】

你当前的代码是这样的:

java 复制代码
List<String> gongkuangIds = gongkuangBoundList.stream()
    .filter(obj -> obj.getBoundValue() != null)
    .map(PlanSchemeProductionBoundInfo::getBoundValue)
    .distinct()
    .collect(Collectors.toList());

这段代码从 gongkuangBoundList 中提取出非空的 boundValue,然后去重,最终收集为一个 List。

✅ 你的需求是:将结果改为返回 List 类型,而不是 List。

这就意味着:

•getBoundValue() 返回的是 String 类型;

•你需要将它转换为 Long 类型;

•并最终生成一个 List。

✅ 解决方案:在 map 阶段加上类型转换你可以使用 parseLong() 或 valueOf() 方法进行转换。推荐使用 parseLong(),更直观。

✅ 修改后的代码如下:

java 复制代码
List<Long> gongkuangIds = gongkuangBoundList.stream()
    .filter(obj -> obj.getBoundValue() != null && !obj.getBoundValue().isEmpty())
    .map(obj -> Long.parseLong(obj.getBoundValue())) // 转换为 Long
    .distinct()
    .collect(Collectors.toList());

✅ 注意事项

  1. 确保字符串可以转为数字如果你不确定 boundValue 是否一定是数字字符串,建议加异常处理或过滤非法数据:
java 复制代码
.map(obj -> {
    try {
        return Long.parseLong(obj.getBoundValue());
    } catch (NumberFormatException e) {
        return null;
    }
})
.filter(Objects::nonNull)
  1. 避免空字符串导致错误上面的 .filter(obj -> obj.getBoundValue() != null && !obj.getBoundValue().isEmpty()) 可以防止 Long.parseLong() 报错。

✅ 完整示例(带安全处理)

java 复制代码
List<Long> gongkuangIds = gongkuangBoundList.stream()
    .map(obj -> obj.getBoundValue())
    .filter(Objects::nonNull)
    .filter(value -> !value.isEmpty())
    .map(value -> {
        try {
            return Long.parseLong(value);
        } catch (NumberFormatException e) {
            // 可选:记录日志
            return null;
        }
    })
    .filter(Objects::nonNull)
    .distinct()
    .collect(Collectors.toList());

✅ 总结

步骤 说明

filter(obj -> obj.getBoundValue() != null) 过滤掉 null 值

filter(value -> !value.isEmpty()) 过滤掉空字符串

map(value -> Long.parseLong(value)) 字符串转 Long

.filter(Objects::nonNull) 排除转换失败的情况(可选)

.distinct() 去重

.collect(...) 收集为 List

相关推荐
Lakers-2412 分钟前
1987年5月29日晚上19-21点出生性格、运势和命运
java
AI人工智能+电脑小能手17 分钟前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
__log23 分钟前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc23 分钟前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
祐樹26 分钟前
1987年5月23日下午15-17点出生性格、运势和命运
java
zhangjw3426 分钟前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
geovindu42 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
NWU_LK1 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
一只小菜鸡..1 小时前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
叶总没有会1 小时前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai