Java 8 对数组的流和操作
2022-08-31 06:11:03
我刚刚发现了新的 Java 8 流功能。来自Python,我想知道现在是否有一种简洁的方法可以在数组上进行操作,例如求和,以“一行pythonic”方式将两个数组相乘?
谢谢
我刚刚发现了新的 Java 8 流功能。来自Python,我想知道现在是否有一种简洁的方法可以在数组上进行操作,例如求和,以“一行pythonic”方式将两个数组相乘?
谢谢
添加了新的方法,将数组转换为Java 8流,然后可用于求和等。java.util.Arrays
int sum = Arrays.stream(myIntArray).sum();
将两个数组相乘有点困难,因为我想不出一种方法可以在处理 Stream 操作的同时获取值和索引。这意味着您可能必须通过数组的索引进行流式传输。
//in this example a[] and b[] are same length
int[] a = ...
int[] b = ...
int[] result = new int[a.length];
IntStream.range(0, a.length).forEach(i -> result[i] = a[i] * b[i]);
评论者@Holger指出,您可以使用该方法而不是像这样:map
forEach
int[] result = IntStream.range(0, a.length).map(i -> a[i] * b[i]).toArray();
您可以使用以下命令将数组转换为流:Arrays.stream()
int[] ns = new int[] {1,2,3,4,5};
Arrays.stream(ns);
获得流后,您可以使用文档中描述的任何方法,例如或其他方法。您可以通过使用 Lambda 函数调用相关的流方法,在 Python 中实现或类似操作:sum()
map
filter
Arrays.stream(ns).map(n -> n * 2);
Arrays.stream(ns).filter(n -> n % 4 == 0);
修改完流后,然后调用以将其转换回数组以在其他地方使用:toArray()
int[] ns = new int[] {1,2,3,4,5};
int[] ms = Arrays.stream(ns).map(n -> n * 2).filter(n -> n % 4 == 0).toArray();