在JAVA中将字符串分解为Long或Long of List of Long循环

时间:2012-04-03 13:22:35

标签: java

我想将String数组分解为Long数组或List。 我不想使用Loop。

是否有任何Java方法可以执行此操作。

6 个答案:

答案 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);
   }
});

ListsFunction来自Guava库。

答案 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