当前位置: 首页 > 知识库问答 >
问题:

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

乜胜泫
2023-03-14

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

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

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

Java8中最好的版本是什么?

共有2个答案

公羊瀚
2023-03-14

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

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

您不必将其复制到新数组中。如果要就地转换阵列,可以执行以下操作:

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

还有一个平行变体< code > parallel stall 。

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

常温文
2023-03-14

使用流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()方法抛出检查过的异常,您可能会遇到问题。在这种情况下,将它们转换为未检查的异常或咨询此问题。

 类似资料:
  • 我关注的是从包含数千个元素的Java PriorityQueue创建排序数组的不同风格。Java8文档说 如果需要有序遍历,请考虑使用数组。排序(pq.toArray())。 然而,我确实喜欢流式API,所以我最初的想法是 (其中,是PriorityQueue的自定义比较器,我确实想要它的相反顺序。)与下列习惯用法相比,使用这个习惯用法有什么缺点吗 后面的代码显然更直接地遵循了API文档的建议,但

  • 问题内容: 我遇到了一个问题,需要成对地遍历数组。最好的方法是什么?或者,作为替代方案,将Array转换为成对的Array(然后可以正常迭代)的最佳方法是什么? 这是我得到的最好的。它必须是,而且不是很漂亮。有没有更好的办法? 问题答案: 您可以 映射 跨步而不是对其进行迭代,从而可以将结果作为 常量获取: 如果只需要遍历对,并且给定的数组很大,那么避免创建带有延迟映射的中间数组可能是有利的:

  • 我想转换但给我的是。如何将其转换为?

  • 问题内容: 顾名思义,将字符串数组转换为向量的最佳方法是什么? 谢谢 问题答案: 调用Vector的构造函数,该构造函数使用现有集合(在本例中为数组)初始化自身:

  • 本文向大家介绍Swift使用map(_ :)转换数组的元素,包括了Swift使用map(_ :)转换数组的元素的使用技巧和注意事项,需要的朋友参考一下 示例 如Array符合SequenceType,我们可以使用map(_:)转化的阵列A到阵列B使用类型的封闭(A) throws -> B。 例如,我们可以使用它将Ints数组转换为s数组,String如下所示: map(_:)将遍历数组,将给定的

  • 问题内容: 我只是从ReactJS开始,并尝试了其他类似问题的解决方案,但到目前为止还算不上成功。 这是我的工作代码: 但是当我将Numbers Array传递为: 我收到此错误: 警告:遇到两个具有相同密钥的孩子。密钥应该是唯一的,以便组件在更新期间保持其身份。 所以我的问题是:在这种情况下,提供密钥的最佳方法是什么?如果我将数字(如上例所示)用作键,那么避免此警告的最佳解决方案是什么? 谢谢!