我有两个 list ,比如:

List<Double> margins =  Arrays.asList(1.0,2.0,3.0,4.0,5.0);
List<Integer> quantity = Arrays.asList(1,2,3,4,5);

我想在它们之间做元素乘法,我知道我可以用循环的标准来做,但我想知道我们是否可以通过Stream API通过使过程更快和更少的资源负担来实现同样的效果.

这类似于pythonML对numpy数组所做的事情;他们不是创建for循环,而是将事物向量化,这会使其速度更快.

推荐答案

您可以通过STREAM将数组中的元素相互相乘,但它不会比传统循环更高效.然而,对于如此小的数据集,开销如此之小,不会产生任何影响.

下面是一个通过流的实现.基本上,您可以使用IntStream类来迭代您的两个列表,从0到最小列表的大小(不包括).然后,将每个int索引映射到一个双精度对象,该双精度对象表示margins列表的第i个元素与quantity列表的第i个元素的乘积,最后将结果收集到List<Double>中.

List<Double> margins = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0);
List<Integer> quantity = Arrays.asList(1, 2, 3, 4, 5);

List<Double> res = IntStream.range(0, Math.min(margins.size(), quantity.size()))
        .mapToObj(i -> margins.get(i) * quantity.get(i))
        .collect(Collectors.toList());

Java相关问答推荐

如何在Spring Security中设置CustomLogin路径?

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

如何计算内循环的时间复杂度?

我可以在regex中的字符类中放置断言吗?

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

为什么我的画布没有显示在PFA应用程序中?

在现代操作系统/硬件上按块访问数据值得吗?

从Spring5迁移到Spring6:无法在雅加达包中找到类

什么是Java原子属性的正确getter和setter

Java中将文本拆分为数字或十进制数字和字符串

Java17支持哪个MapR版本?

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

如果List是一个抽象接口,那么Collectors.toList()如何处理流呢?

无法使用Java PreparedStatement在SQLite中的日期之间获取结果

记录是类的语法糖吗?

Java Flux中的延迟增加

通过/失败的参数化junit测试方法执行数

在数组中查找素数时出现逻辑错误

如何显示新布局

在JPanel上使用GridBagLayout并将JButton放在里面时出现问题