如何使用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[]
答
对于您的替代方案 - 您尝试将String对象复制到整数。这是不可能的,你得到你应得的 - 一个ClassCastException ;-)
至少在Java - System.arraycopy只适用于兼容的数组类型。
你的第一种方法并不差。如果代码看起来太丑陋,只是把它藏在与像签名的私有方法:
private int[] parseStrings(String[] args, int start);
酷,谢谢! – Cuga 2010-05-31 02:03:50