我想将String数组分解为Long数组或List。 我不想使用Loop。
是否有任何Java方法可以执行此操作。
答案 0 :(得分:8)
没有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);
}
注意 - 因为我开始得到递归示例的downvotes:它纯粹是学术性的,并不打算用于生产代码 - 思想,这很明显;)
答案 1 :(得分:4)
在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);
}
});
答案 2 :(得分:3)
简化Eugene与Guava库的回答。自Guava 16.0。
List<Long> longList = Lists.transform(Arrays.asList(stringArray), Longs.stringConverter());
更新:使用Java 8解决方案,没有第三方库:
List<Long> longList = Stream.of(stringArray).map(Long::valueOf).collect(Collectors.toList());
答案 3 :(得分:1)
没有循环没有办法做到这一点(即使你没有明确地编写循环代码,你将调用的方法将使用一个循环),除非你现在包含的long
值的数量String
并将其手动添加到List
。
答案 4 :(得分:1)
你最好的选择是Guavas Lists.transform功能。
String[] stringArray = {"1999", "20000"};
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList,
new Function<String, Long>() {
Long apply(String value) {
return Long.valueOf(value);
}
});
注意:Guava当然必须进行循环来实现这一点,但代码中没有循环。
答案 5 :(得分:0)
使用逗号分割字符串值,并使用Java 8将字符串数组转换为包装长数组/原始长数组。
String values = "2846, 4514, 8495, 4587, 5772, 3813, 6947, 3186";
Long[] longArray = Arrays.stream(values.split(","))
.map(String::trim)
.map(Long::valueOf)
.toArray(Long[]::new);//Convert String array to Long array
long[] longPrimitiveArray = Arrays.stream(values.split(","))
.map(String::trim)
.mapToLong(Long::valueOf)
.toArray();//Convert String array to long array