你當前的代碼是這樣的:
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