没有O(1)操作将a String[](用数字字符串)"转换" 为a long[].如果循环可见或隐藏在某些第三方方法中,它将始终为O(n).
如果您不想"看到"循环,只需实现一个方法
Long[] pseudoOneStepConversion(numbers);
Run Code Online (Sandbox Code Playgroud)
并实施
privat Long[] pseudoOneStepConversion(String[] numbers) {
Long[] result = new long[numbers.length];
for (int i = 0; i < numbers.length; i++)
result[i] = Long.parseLong(numbers[i]);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我们也可以递归地执行它 - 它仍然是O(n),性能较差并且看起来不像循环:
public static void main(String[] args) {
List<Long> target = new ArrayList<Long>();
copy(new String[]{"1", "2", "3"}, target, 0);
System.out.println(target);
}
private static void copy(String[] source, List<Long> target, int index) {
if (index == source.length)
return;
target.add(Long.parseLong(source[index]));
copy(source, target, index+1);
}
Run Code Online (Sandbox Code Playgroud)
注意 - 因为我开始得到递归示例的downvotes:它纯粹是学术性的,并不打算用于生产代码 - 思想,这很明显;)
用Guava库简化的Eugene答案。从Guava 16.0起。
List<Long> longList = Lists.transform(Arrays.asList(stringArray), Longs.stringConverter());
Run Code Online (Sandbox Code Playgroud)
更新:使用Java 8的解决方案,没有第3方库:
List<Long> longList = Stream.of(stringArray).map(Long::valueOf).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)