我正在使用下面的函数根据另一个列表过滤一个列表。例如: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;
}
最佳答案
使用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;
}
关于java - 基于另一个 `List` 过滤 `List`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60755506/