简体   繁体   中英

Checking common element between two similar Lists using Streams

Let's say, I've 2 similar lists (not same though). For Example: One List of Integers and another List of Hex String (which can be mapped to Integer), how can I find if there's any common element at same index in both the lists using streams?

Let's consider the following code:

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);

In this example, the 3rd element of both the lists are same ie 13 or OxD

How can I check (or find) if there's any such common element at same index and break at first match (something like anyMatch()) using Streams? This is a simple problem to solve without streams, but can it be solved using Streams?

You could do something like below to check if any common elements exist

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)));
}

or something like below to get the indices of common elemnts

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();
}

for the given example:

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)));

output:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM