Java 8 -转换数组元素的最佳方式



从Java 8开始,所以需要一点时间来适应它。这是一个经典问题,我有一个对象数组,我想要变换。

在Java8之前,理想的代码是(没有空指针):

P[] outputArray = new P[inputArray.length];
for (int i =0; i< inputArray.length; i++ )
{
    outputArray [i] = inputArray[i].transformToP();
}

Java8中最好的版本是什么

使用Stream API非常简单:

P[] outputArray = Arrays.stream(inputArray).map(e -> e.transformToP()).toArray(P[]::new);

也可以使用方法引用(假设I是输入元素的类型):

P[] outputArray = Arrays.stream(inputArray).map(I::transformToP).toArray(P[]::new);

注意,如果transformToP()方法抛出检查异常,您可能会遇到问题。在这种情况下,将它们转换为未选中的,或者参考这个问题。

在数组上使用流是Tagir Valeev的回答中描述的一种很好的技术。然而,不要忘记Arrays.setAll。这是一个方便的快捷方式,可以根据索引设置数组的所有元素。要通过某个函数将一个数组转换为一个新数组,您可以这样做:

P[] outputArray = new P[inputArray.length];
Arrays.setAll(outputArray, i -> inputArray[i].transform());

你不需要把它复制到一个新的数组中。如果您想就地转换数组,您可以这样做:

Arrays.setAll(array, i -> array[i].transform());

也有一个平行变化parallelSetAll

实际上,这只是输入数组索引上的IntStream.range,但对于快速的一行程序来说,它有时非常方便。

最新更新