将两个 List<Integer> 的每个元素相加到一个新列表中

如何通过包含相同索引的值将两个列表合并为一个列表。

我有 2 个列表,我想通过包含相同索引的值来合并两个列表。

(如果可能,请建议我使用 java 8: Streams。)


List<String> a = Arrays.asList("1", "2", "3");

List<String> b = Arrays.asList("10", "20", "30");

输出 :


{"11", "22", "33"}


心有法竹
浏览 721回答 3
3回答

梦里花落0921

仅使用标准库的解决方案:List<String> a = Arrays.asList("1", "2", "3");List<String> b = Arrays.asList("10", "20", "30");List<String> c = IntStream.range(0, a.size())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(i -> Integer.parseInt(a.get(i)) + Integer.parseInt(b.get(i)))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .mapToObj(Integer::toString)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());请注意,输入列表将数字存储为String,如您的示例中所指定。此外,您可以将map()和mapToObj()调用合并为一个mapToObj()调用,但为了清楚起见,我想将其分开。它还假设两个列表的大小相同,如果不是,ArrayIndexOutOfBoundsException则将抛出。

呼如林

你试过用zip吗?https://github.com/poetix/protonpack有一个不错的库StreamUtils.zip(a.stream(),&nbsp;b.stream(),&nbsp;(e1,e2)&nbsp;->&nbsp;(Integer.parseInt(e1)&nbsp;+&nbsp;Integer.parseInt(e2)).toString())

紫衣仙女

如果您使用Eclipse Collections,您可以使用zip:List<String> a = Arrays.asList("1", "2", "3");List<String> b = Arrays.asList("10", "20", "30");List<String> c = Lists.adapt(a).zip(b)&nbsp; &nbsp; &nbsp; &nbsp; .collectInt(p -> Integer.parseInt(p.getOne()) +Integer.parseInt(p.getTwo()))&nbsp; &nbsp; &nbsp; &nbsp; .collect(Integer::toString);System.out.println(c);输出: [11, 22, 33]您还可以Collectors2从 Eclipse Collections 中使用Stream.List<String> a = Arrays.asList("1", "2", "3");List<String> b = Arrays.asList("10", "20", "30");List<String> c = a.stream().collect(Collectors2.zip(b))&nbsp; &nbsp; &nbsp; &nbsp; .collectInt(p -> Integer.parseInt(p.getOne()) + Integer.parseInt(p.getTwo()))&nbsp; &nbsp; &nbsp; &nbsp; .collect(Integer::toString);System.out.println(c);输出: [11, 22, 33]注意:我是 Eclipse Collections 的提交者。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java