使用Java8流比较两个列表相同位置的元素
我有两个列表,我想比较列表1和列表2的每个元素,并在列表3中得到结果,例如使用Java8流比较两个列表相同位置的元素,java,list,java-stream,Java,List,Java Stream,我有两个列表,我想比较列表1和列表2的每个元素,并在列表3中得到结果,例如 List1 = {99,22,33} list2 = {11,24,33} 结果: list3 = {1,-1,0} 如何更好地使用stream实现这一点?像这样尝试: 这将用比较结果替换用于索引每个列表的int流。然后把它们收集到一个列表中 注意:我添加了一个保护措施来解释不同大小的列表。它将使用两者中较小的一个来防止抛出异常。但较长列表的尾随元素将被忽略 List<Integer> list1 =
List1 = {99,22,33}
list2 = {11,24,33}
结果:
list3 = {1,-1,0}
如何更好地使用stream实现这一点?像这样尝试:
这将用比较结果替换用于索引每个列表的int
流。然后把它们收集到一个列表中
注意:我添加了一个保护措施来解释不同大小的列表。它将使用两者中较小的一个来防止抛出异常。但较长列表的尾随元素将被忽略
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);
是否保证列表的大小相同?如果不是,您希望如何处理这种情况?很好的解决方案,但正如@Pshemo所说,只有当两个列表的大小相同时,它才会起作用。如果列表2的成员较少,则会引发运行时异常。无论如何,OP提到了Java8,所以
List.of
是Java9的一部分,因此我将它改为Arrays.asList
:)是的。我修改了我的答案,并使用Math.min()获得最小长度以避免出现异常。这取决于OP是否需要。是的,两个列表大小相同。感谢您提供的解决方案,这将适用于我@wjs或使用mapToObj
而不是map…boxed
combination@WJS真奇怪。最近的一次调查收集了反馈意见,我在调查中也提出了类似的意见。我相信这个网站在某种程度上缺乏对“富人不再变富”的克制。(不过,这里没有进一步讨论)
[1, -1, 0]