使用 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 个元素相同,即 13
或 OxD
我如何使用 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]
比方说,我有 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 个元素相同,即 13
或 OxD
我如何使用 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]