根据另一个“列表”过滤“列表”

时间:2020-03-19 10:43:02

标签: java arrays list filter java-stream

我正在使用下面的功能基于另一个列表过滤列表。例如:programLines [1, 2, 4, 5, 5, 6, 6, 7, 7, 9, 13]和行[9, 10, 13, 14]到此输出[9, 13]中。但是我想将其更改为此输出-> [9,0,13,0]换句话说,用值0填充其余元素。

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
            List<Integer> listOutput =
                lines.stream().filter(programLines::contains).collect(Collectors.toList());
            return listOutput;
          }

1 个答案:

答案 0 :(得分:3)

使用map代替filter

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
    List<Integer> listOutput =
        lines.stream()
             .map(i -> programLines.contains(i) ? i : 0)
             .collect(Collectors.toList());
    return listOutput;
}

如果programLines大,将其转换为Set以获得更好的性能可能会有用:

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
    Set<Integer> filter = new HashSet<>(programLines);
    List<Integer> listOutput =
        lines.stream()
             .map(i -> filter.contains(i) ? i : 0)
             .collect(Collectors.toList());
    return listOutput;
}