我想把字符串数组分解成长数组或列表。我不想使用循环。
有没有什么Java方法可以做到这一点。
发布于 2012-04-03 21:27:34
没有O(1)操作可以将String[] (带有数字字符串)“转换”为long[]。如果循环在第三方方法中可见或隐藏,它将始终为O(n)。
如果您不想“看到”循环,只需实现一个方法
Long[] pseudoOneStepConversion(numbers);并实现
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;
}我们也可以递归-它仍然是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);
}注-因为我开始对递归示例投下反对票:它纯粹是学术上的,并没有集成到生产代码中使用--认为,这是很清楚的;)
发布于 2014-08-14 17:11:29
使用Guava库简化的Eugene答案。从芭乐16.0开始。
List<Long> longList = Lists.transform(Arrays.asList(stringArray), Longs.stringConverter());更新:使用Java8的解决方案,没有第三方库:
List<Long> longList = Stream.of(stringArray).map(Long::valueOf).collect(Collectors.toList());发布于 2012-04-03 21:31:23
借助3rd party libraries的一些帮助,您可以避免在自己的代码中编写循环,但在引擎盖下的某个地方会有一个循环。例如:
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList, new Function<String, Long>() {
public Long apply(String s) {
return Long.valueOf(s);
}
});类Lists和Function来自Guava库。
https://stackoverflow.com/questions/9994180
复制相似问题