2016-04-15 2 views
6

Что такое простой способ преобразования String[] в Collection<Integer>? Вот как я это делаю прямо сейчас, но не уверен, что это хорошо:Строковый массив для коллекции Integer?

String[] myStringNumbers; 

Arrays.stream(Arrays.asList(myStringNumbers).stream().mapToInt(Integer::parseInt).toArray()).boxed().collect(
        Collectors.toList()); 

ответ

8

Вам не нужно создавать промежуточный массив. Просто разобрать и собрать (со статическим импортом Collectors.toList):

Arrays.stream(myStringNumbers).map(Integer::parseInt).collect(toList()); 
3

Ненужно использовать parseInt, как он будет боксировать результат в коллекцию, и, как указано @Misha вы можете использовать Arrays.stream для создания потока. Таким образом, вы можете использовать следующее:

Arrays.stream(myStringNumbers).map(Integer::decode).collect(Collectors.toList()); 

Пожалуйста, обратите внимание, что это не делать какие-либо обработки ошибок (и номера не должны начинаться с 0, # или 0x в случае, если вы не хотите сюрпризов). Если вам нужны только базовые 10 номеров, Integer::valueOf - лучший выбор.

+2

Значения 'int' вставляются в каждом случае, поэтому независимо от того, используете ли вы значение valueOf или' parseInt', нет никакой разницы. И довольно странно рекомендовать использование другого метода, например 'decode', за которым следует предупреждение о неожиданностях, вызванных тем, что этот метод имеет другую цель. – Holger

0

Вот что я думаю:

String[] myStringNumbers = {"1", "2"}; 
List<Integer> list = Stream.of(myStringNumbers).map(Integer::valueOf).collect(Collectors.toList()); 

Я надеюсь, что это может быть какая-то помощь. :)