我正在使用Java 7,并且正在在Guava API中搜索一种方法,可以将函数应用于数组而无需先将其转换为Collection。我愿意为此创建自己的类,但我不想重复造轮子。因此,这是目前我发现的关于如何使用Guava将函数应用于数组的总结:
但我希望能够做到这样的事情:
理想情况下,我所说的功能应该是类型安全的。
Integer[] someNumbers = new Integer[]{1, 2, 3};
Integer[] returnedNumbers = Collections2.transform(Arrays.asList(someNumbers), squareNumberFunction).toArray(new Integer[0]);
assertThat(returnedNumbers).isEqualTo(new Integer[]{1, 4, 9});//Using AssertJ here
但我希望能够做到这样的事情:
Integer[] someNumbers = new Integer[]{1, 2, 3};
Integer[] returnedNumbers = Arrays.transform(someNumbers, squareNumberFunction);
assertThat(returnedNumbers).isEqualTo(new Integer[]{1, 4, 9});
理想情况下,我所说的功能应该是类型安全的。
编辑
为了更进一步地解释问题:
- 我所说的数组不是原始数组,它们引用复杂对象(我只使用整数来很容易地举例说明我所说的内容)。
- 我无法控制接收或发送结构,它们是数组(如果您认为这有助于您更好地理解问题,请想象一个遗留代码的情况)。
- 在转换数组和访问它们时,效率是必须的。
List <String> listOfStrings = Lists.transform(listOfIntegers, i -> i.toString())
,但是这在数组中是不可能的。您无法创建一个String []数组,该数组是Integer[]数组的视图。 - JB Nizet