3 回答
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则将抛出。
TA贡献1798条经验 获得超3个赞
你试过用zip吗?https://github.com/poetix/protonpack有一个不错的库
StreamUtils.zip(a.stream(), b.stream(), (e1,e2) -> (Integer.parseInt(e1) + Integer.parseInt(e2)).toString())
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 的提交者。
添加回答
举报