2016-11-29 5 views
8

У меня есть строка:Java 8 новообращенный Строка Интс к списку <Integer>

String ints = "1, 2, 3"; 

Я хотел бы, чтобы преобразовать его в список Интс:

List<Integer> intList 

я в состоянии преобразовать его в список строк таким образом:

List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList()); 

Но не список ints.

Любые идеи?

+4

Ваша последняя строка кода даст вам список с ровно одной строкой, со значением '" 1, 2, 3 "'. Возможно, вы имели в виду: 'Stream.of (" 1 "," 2 "," 3 ")'? – Jesper

ответ

17

Вам необходимо разделить строку и сделать поток из каждой части. Метод splitAsStream(input) делает именно это:

Pattern pattern = Pattern.compile(", "); 
List<Integer> list = pattern.splitAsStream(ints) 
          .map(Integer::valueOf) 
          .collect(Collectors.toList()); 

Он возвращает Stream<String> той части входной строки, которые затем можно сопоставить с Integer и собрать в список.

Обратите внимание, что вы можете сохранить шаблон в константе и повторно использовать его каждый раз, когда это необходимо.

+2

@Igor. На самом деле победителя нет, просто разные решения для выполнения задачи. Создание массива и передача его в Stream.а также в зависимости от строк, которые вы хотите проанализировать, и точного разделителя (если это не '', ''), возможно, это решение с 'splitAsStream' будет быстрее, чем другое. Это необходимо измерить. – Tunaki

+4

Я бы предпочел, чтобы этот был на моем. Не знал о методе 'Pattern.splitAsStream()'. Отлично! –

+6

Вы можете использовать 'Pattern.compile (", ", Pattern.LITERAL);' чтобы намекнуть на двигатель, что нет реального соответствия шаблону. Разумеется, движок обнаруживает себя без флага, но указание флажка пропускает процесс анализа шаблона. – Holger

14

Регулярное выражение Расщепление это то, что вы ищете

Stream.of(ints.split(", ")) 
     .map(Integer::parseInt) 
     .collect(Collectors.toList()); 
+0

Да, но он специально попросил Java8 решить этот вопрос –

+0

Это не создаст список Rainer

+5

Я всегда рекомендую использовать 'Arrays.stream', если вход представляет собой массив, т. Е. Когда нет реального вызова varargs. Это позволяет понять, что мы передаем массив и будем корректно работать с массивами примитивных типов вместо создания одного потока элементов. Для этого конкретного случая оба будут делать то же самое. – Holger

2

Сначала разделите строку на отдельные числа, затем преобразуйте те (неподвижные строки) в действительные целые числа и, наконец, соберите их в списке. Вы можете сделать все это путем цепочки потоков.

String ints = "1, 2, 3"; 
List<Integer> intList = Stream 
     .of(ints.split(", ")) 
     .map(Integer::valueOf) 
     .collect(Collectors.toList()); 
System.out.println(intList); // [1, 2, 3] 
0

Вы можете просто использовать функцию массива asList, а затем преобразовать ее в java8.

Не забудьте удалить пробелы.

List<Integer> erg = Arrays.asList(ints.replace(" ", "").split(",")).stream().map(Integer::parseInt).collect(Collectors.toList()); 

EDIT: К сожалению я не видел, что это была одна строка, думал, что это был массив String.

 Смежные вопросы

  • Нет связанных вопросов^_^