你当前的代码是这样的:
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(),更直观。
✅ 修改后的代码如下:
List<Long> gongkuangIds = gongkuangBoundList.stream()
.filter(obj -> obj.getBoundValue() != null && !obj.getBoundValue().isEmpty())
.map(obj -> Long.parseLong(obj.getBoundValue())) // 转换为 Long
.distinct()
.collect(Collectors.toList());
✅ 注意事项
- 确保字符串可以转为数字如果你不确定 boundValue 是否一定是数字字符串,建议加异常处理或过滤非法数据:
.map(obj -> {
try {
return Long.parseLong(obj.getBoundValue());
} catch (NumberFormatException e) {
return null;
}
})
.filter(Objects::nonNull)
- 避免空字符串导致错误上面的 .filter(obj -> obj.getBoundValue() != null && !obj.getBoundValue().isEmpty()) 可以防止 Long.parseLong() 报错。
✅ 完整示例(带安全处理)
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