为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2021-12-01 17:12:57
如何通过包含相同索引的值将两个列表合并为一个列表。我有 2 个列表,我想通过包含相同索引的值来合并两个列表。(如果可能,请建议我使用 java 8: Streams。)List<String> a = Arrays.asList("1", "2", "3");List<String> b = Arrays.asList("10", "20", "30");输出 :{"11", "22", "33"}
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

仅使用标准库的解决方案:


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

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


List<String> c = IntStream.range(0, a.size())

                          .map(i -> Integer.parseInt(a.get(i)) + Integer.parseInt(b.get(i)))

                          .mapToObj(Integer::toString)

                          .collect(Collectors.toList());

请注意,输入列表将数字存储为String,如您的示例中所指定。此外,您可以将map()和mapToObj()调用合并为一个mapToObj()调用,但为了清楚起见,我想将其分开。


它还假设两个列表的大小相同,如果不是,ArrayIndexOutOfBoundsException则将抛出。


查看完整回答
反对 回复 2021-12-01
?
呼如林

TA贡献1798条经验 获得超3个赞

你试过用zip吗?https://github.com/poetix/protonpack有一个不错的库

StreamUtils.zip(a.stream(), b.stream(), (e1,e2) -> (Integer.parseInt(e1) + Integer.parseInt(e2)).toString())



查看完整回答
反对 回复 2021-12-01
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果您使用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)

        .collectInt(p -> Integer.parseInt(p.getOne()) +Integer.parseInt(p.getTwo()))

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

        .collectInt(p -> Integer.parseInt(p.getOne()) + Integer.parseInt(p.getTwo()))

        .collect(Integer::toString);


System.out.println(c);

输出: [11, 22, 33]


注意:我是 Eclipse Collections 的提交者。


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 720 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信