使用Java 8流比较两个列表相同位置的元素

Son*_*ali 0 java list java-stream

我有两个列表,我想将列表 1 的每个元素与列表 2 的每个元素进行比较,并在列表 3 中获得结果,例如

List1 = {99,22,33}

list2 = {11,24,33}
Run Code Online (Sandbox Code Playgroud)

结果:

list3 = {1,-1,0}
Run Code Online (Sandbox Code Playgroud)

我如何最好使用流来做到这一点?

WJS*_*WJS 5

像这样尝试:

这将ints用比较的结果替换用于索引每个列表的流。然后将它们收集到列表中。

注意:我添加了一个保护措施来考虑不同大小的列表。它将使用两者中较小的一个来防止抛出异常。但是较长列表的尾随元素将被忽略。

List<Integer> list1 = List.of(99, 22, 33);
List<Integer> list2 = List.of(11, 24, 33);

// safeguard against different sized lists.
int minLen = Math.min(list1.size(), list2.size());
List<Integer> result = IntStream.range(0, minLen)
        .map(i -> list1.get(i).compareTo(list2.get(i)))
        .boxed().collect(Collectors.toList());

System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

印刷

[1, -1, 0]
Run Code Online (Sandbox Code Playgroud)