使用 Streams 检查两个相似列表之间的公共元素

Checking common element between two similar Lists using Streams

比方说,我有 2 个相似的列表(虽然不一样)。 例如:一个整数列表和另一个十六进制字符串列表(可以映射到整数),如何使用流查找两个列表中相同索引处是否有任何公共元素?

让我们考虑以下代码:

List<Integer> l1 = List.of(11, 12, 13, 14, 15);
List<String> l2 = List.of("F", "E", "D", "C", "B")

boolean isCommon = checkIfCommonElementExists(l1, l2);
System.out.print("There's at least one common element at same index: " + isCommon);

在此示例中,两个列表的第 3 个元素相同,即 13OxD

我如何使用 Streams 检查(或查找)同一索引处是否存在任何此类公共元素并在第一次匹配时中断(类似于 anyMatch())?这是一个不用流就可以解决的简单问题,但是可以使用流来解决吗?

您可以像下面这样检查是否存在任何共同元素

private static boolean checkIfCommonElementExists(List<Integer> list1, List<String> list2) {
    return IntStream.range(0, Math.min(list1.size(), list2.size()))
            .anyMatch(i -> list1.get(i).equals(Integer.parseInt(list2.get(i),16)));
}

或类似下面的内容以获取常见元素的索引

private static int[] findCommonElementIndexes(List<Integer> list1, List<String> list2) {
    return IntStream.range(0, Math.min(list1.size(), list2.size()))
            .filter(i -> list1.get(i).equals(Integer.parseInt(list2.get(i),16)))
            .toArray();
}

对于给定的示例:

List<Integer> l1 = List.of(11, 12, 13, 14, 15);
List<String> l2 = List.of("F", "E", "D", "C", "B");

boolean isCommon = checkIfCommonElementExists(l1, l2);
System.out.println("There's at least one common element at same index: " + isCommon);

System.out.println("Common indices" + Arrays.toString(findCommonElementIndexes(l1,l2)));

输出:

There's at least one common element at same index: true
Common indices: [2]