如何使用Groovy将一个字符串数组中的子集复制到一个整数数组中?

问题描述:

我在Groovy类一个字符串数组(参数到主法):如何使用Groovy将一个字符串数组中的子集复制到一个整数数组中?

String[] args 

我想的第三转换为最后一个元素到整数的一个新的数组。是否有更简单的方法在Groovy比其他要做到这一点:

final int numInts = args.length - 2 
final int [] intArray = new int[numInts] 
for (int i = 2; i < args.length; i++) { 
    intArray[i-2]=Integer.parseInt(args[i]) 
} 

我想做的事:

final int numInts = args.length - 2 
final int [] intArray = new int[numInts] 
System.arraycopy(args, 2, intArray, 0, numInts) 

但它抛出一个类转换异常。

谢谢!

这是我的解决方案:

def intArray = args[2..-1].collect { it as int } as int[] 

2..-1范围选择从3日到最后所有元素。 collect方法使用闭包中的代码来转换数组的每个元素。最后的as int[]将由collect方法产生的整数列表转换为整数数组。由于Groovy不支持原始类型,因此int将始终保存为java.lang.Integer,但您可以使用它们,就好像它们是Java基本类型一样。从List到数组的转换是可选的。由于Collections是Groovy中的第一类公民,并且在Java中工作起来要容易得多,所以我宁愿直接使用Lists而不是数组。

编辑: 或者,你可以用所谓的spread operator*.更换collect方法,但你必须使用的方法,而不是asType(int)的短版as int

def intArray = args[2..-1]*.asType(int) as int[] 
+0

酷,谢谢! – Cuga 2010-05-31 02:03:50

对于您的替代方案 - 您尝试将String对象复制到整数。这是不可能的,你得到你应得的 - 一个ClassCastException ;-)

至少在Java - System.arraycopy只适用于兼容的数组类型。

你的第一种方法并不差。如果代码看起来太丑陋,只是把它藏在与像签名的私有方法:

private int[] parseStrings(String[] args, int start);