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

修改Java List过滤逻辑:匹配保留原值,不匹配填充0

修改Java过滤逻辑,保留原列表长度并替换不存在元素为0

嗨,这个需求很好实现!你之前的代码用filter会直接移除不匹配的元素,所以输出列表长度和原lines不一致。我们只需要把流式操作里的filter换成map,对每个元素做判断转换就能达到目标:

import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.stream.Collectors;

public List<Integer> filter(List<Integer> lines, List<Integer> programLines) {
    // 优化:将programLines转为HashSet,提升contains方法的查询效率
    Set<Integer> programLineSet = new HashSet<>(programLines);
    
    return lines.stream()
            .map(line -> programLineSet.contains(line) ? line : 0)
            .collect(Collectors.toList());
}

关键说明:

  • 用map替代filter:map会遍历处理每一个元素,不会过滤掉任何元素,这样就能保证输出列表的长度和输入lines完全一致
  • 引入HashSet的优化:如果你的programLines数据量较大,ArrayList.contains()的时间复杂度是O(n),多次调用会拖慢性能;而HashSet.contains()是O(1)的查询效率,能大幅提升处理速度。如果数据量很小,你也可以直接用programLines.contains(line),不影响功能。

测试一下你给出的例子:
当programLines为[1, 2, 4, 5, 5, 6, 6, 7, 7, 9, 13]、lines为[9, 10, 13, 14]时,输出结果就是[9, 0, 13, 0],完全符合你的预期。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:08:10