Предположим, что у меня есть набор чисел, таких как 1,2,3,4,5,6,7
input, как один String
. Я хотел бы преобразовать эти числа в List
объектов Long
, т.е. List<Long>
.
Можно ли рекомендовать самый простой способ?
Предположим, что у меня есть набор чисел, таких как 1,2,3,4,5,6,7
input, как один String
. Я хотел бы преобразовать эти числа в List
объектов Long
, т.е. List<Long>
.
Можно ли рекомендовать самый простой способ?
Я бы использовал отличную библиотеку 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 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> rezisableList = new ArrayList<>(fixedSizeList);
или onliner
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, вы можете использовать потоки.
List<Long> numbers = Arrays.asList(numbersArray.split(","))
.stream()
.map(String::trim)
.map(Long::parseLong)
.collect(Collectors.toList());;