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

无需转换为列表,从PreparedStatement.executeBatch返回的int数组中筛选值大于0的元素索引的方法咨询

无需列表转换,直接筛选批量更新有效索引的方案

当然有不用把原数组转成列表的实现方式啦,而且直接操作原数组的效率还更高,给你两种实用的方案:

方案1:用IntStream直接操作原数组(最简洁)

你之前的流式思路完全可以直接适配原数组,根本不需要转列表——只需要把列表的size()换成数组的length,然后通过数组下标直接访问元素就行:

int[] updateResultArray = preparedStatement.executeBatch();
// 直接基于原数组生成索引流,过滤出元素>0的索引
int[] validIndexes = IntStream.range(0, updateResultArray.length)
    .filter(i -> updateResultArray[i] > 0)
    .toArray();

拿你的示例数组[0,2,1,0,0,1,2]测试,这段代码会直接返回[1,2,5,6],完美符合你的需求。

方案2:传统for循环实现(适合偏好非流式API的场景)

如果你不太习惯用流式API,也可以用普通循环手动收集符合条件的索引,同样不需要转换原数组:

int[] updateResultArray = preparedStatement.executeBatch();
List<Integer> validIndexList = new ArrayList<>();
for (int i = 0; i < updateResultArray.length; i++) {
    if (updateResultArray[i] > 0) {
        validIndexList.add(i);
    }
}
// 如果需要转换成int数组,再执行这一步
int[] validIndexes = validIndexList.stream().mapToInt(Integer::intValue).toArray();

这里只是用列表临时存结果,原数组全程没被转换,最后按需转成int数组就行。

小补充

其实你之前的代码逻辑没问题,只是多了“转列表”的冗余步骤——IntStream.range只需要知道元素的数量(数组长度)就能生成索引流,直接通过下标访问原数组元素就完成过滤了,完全没必要绕到列表那一步~

内容的提问来源于stack exchange,提问作者kaviya .P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:07:49