Answers:
添加了新方法java.util.Arrays
来将数组转换为Java 8流,然后将其用于求和等。
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();
mapToInt
避免使用拳击。
您可以使用以下命令将数组转换为流Arrays.stream()
:
int[] ns = new int[] {1,2,3,4,5};
Arrays.stream(ns);
获得流之后,可以使用文档中描述的任何方法,例如sum()
或类似方法。您可以在Python中map
或filter
通过在Lambda函数中调用相关的流方法来实现:
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();
请注意,Arrays.stream(arr)会创建LongStream(或IntStream,...)而不是Stream,因此无法使用map函数修改类型。这就是为什么提供.mapToLong,mapToObject,...函数的原因。
int[] result=IntStream.range(0, a.length).map( i->a[i]* b[i]).toArray();