23

假设我有一组数字,例如1,2,3,4,5,6,7input 作为单个String. 我想将这些数字转换为一个List对象,LongList<Long>.

谁能推荐最简单的方法?

4

7 回答 7

63

你的意思是这样的?

String numbers = "1,2,3,4,5,6,7";

List<Long> list = new ArrayList<Long>();
for (String s : numbers.split(","))
    list.add(Long.parseLong(s));

System.out.println(list);

从 Java 8 开始,您可以将其重写为

List<Long> list = Stream.of(numbers.split(","))
        .map(Long::parseLong)
        .collect(Collectors.toList());

如果你想得到更短的版本List<String>

List<String> fixedSizeList = Arrays.asList(numbers.split(","));
List<String> resizableList = new ArrayList<>(fixedSizeList);

或单线

List<String> list = new ArrayList<>(Arrays.asList(numbers.split(",")));
于 2012-06-15T14:03:36.680 回答
11

的简单方便的解决方案(为了完成线程):

String str = "1,2,3,4,5,6,7";
List<Long> list = Arrays.stream(str.split(",")).map(Long::parseLong).collect(Collectors.toList());
System.out.println(list);

[1、2、3、4、5、6、7]

更好的是,使用Pattern.splitAsStream()

Pattern.compile(",").splitAsStream(str).map(Long::parseLong).collect(Collectors‌​.toList());
于 2014-12-16T11:15:25.633 回答
3
String input = "1,2,3,4,5,6,7";
String[] numbers = input.split("\\,");
List<Integer> result = new ArrayList<Integer>();
for(String number : numbers) {
    try {
        result.add(Integer.parseInt(number.trim()));
    } catch(Exception e) {
        // log about conversion error
    }
}
于 2012-06-15T14:11:19.733 回答
2

您可以使用String.split()Long.valueOf()

String numbers = "1,2,3,4,5,6,7";
List<Long> list = new ArrayList<Long>();
for (String s : numbers.split(","))
    list.add(Long.valueOf(s));

System.out.println(list);
于 2014-10-28T00:02:33.670 回答
1

如果您不在 java8 上并且不想使用循环,那么您可以使用Guava

List<Long> longValues = Lists.transform(Arrays.asList(numbersArray.split(",")), new Function<String, Long>() {
                @Override
                public Long apply(String input) {
                    return Long.parseLong(input.trim());
                }
            });

正如其他人提到的 Java8 一样,您可以使用 Streams。

List<Long> numbers = Arrays.asList(numbersArray.split(","))
                      .stream()
                      .map(String::trim)
                      .map(Long::parseLong)
                      .collect(Collectors.toList());
于 2016-04-28T07:25:03.527 回答
0

我最近使用了以下内容:

import static com.google.common.collect.ImmutableList.toImmutableList;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
...

    final ImmutableList<Long> result = Splitter.on(",")
        .trimResults()
        .omitEmptyStrings()
        .splitToStream(value)
        .map(Long::valueOf)
        .collect(toImmutableList());

这使用了来自 Guava 的 Splitter(处理空字符串和空格)并且不使用令人惊讶的 String.split()

于 2021-07-06T10:11:16.783 回答
-14

我会使用优秀的 google 的 Guava 库来做到这一点。String.split 会引起很多麻烦。

String numbers="1,2,3,4,5,6,7";
Iterable<String> splitIterator = Splitter.on(',').split(numbers);
List<String> list= Lists.newArrayList(splitIterator );
于 2012-06-15T14:09:13.017 回答