java - 基于另一个 `List` 过滤 `List`

标签 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;
          }

最佳答案

使用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/

相关文章:

Java SimpleDateFormat 解析错误的日期

python - 将输入文件的一行中的每个字符添加到列表中,并将每个列表添加到每行之后的另一个列表中

Python - [k] * n 的变体用于列表生成

java volatile与java链表一起使用

java - 系统找不到指定的路径

java - 我每次都在所有类(class)中使用一种方法。有没有办法只写一次这个方法?

Javascript 使用 MAP 从二维数组创建多个字符串?

python - 如何根据索引过滤 numpy 数组?

java - 在数组中声明 52 个图像图标的最简单方法是什么

python - 按列将嵌套列表写入 csv