【发布时间】:2012-06-18 14:37:25
【问题描述】:
假设我有一组像1,2,3,4,5,6,7 这样的数字作为单个String 输入。我想将这些数字转换为 List 的 Long 对象,即 List<Long>。
谁能推荐最简单的方法?
【问题讨论】:
标签: java
假设我有一组像1,2,3,4,5,6,7 这样的数字作为单个String 输入。我想将这些数字转换为 List 的 Long 对象,即 List<Long>。
谁能推荐最简单的方法?
【问题讨论】:
标签: java
你的意思是这样的?
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(",")));
【讨论】:
使用java-8的简单方便的解决方案(为了线程的完成):
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());
【讨论】:
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
}
}
【讨论】:
您可以使用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);
【讨论】:
如果你不在 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());
【讨论】:
Arrays.stream(numbersArray.split(","))或Stream.of(numbersArray.split(","))代替Arrays.asList(numbersArray.split(",")).stream()。
我最近使用了以下:
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(处理空字符串和空格)并且确实 不要使用surprising String.split()。
【讨论】:
我会使用优秀的 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 );
【讨论】:
String.split can cause many troubles. 如....?