2015-07-16 2 views
1

Я делаю некоторые руки упражнения на Java 8 потока функции так думали о применении знаний с проблемой Преобразование строки цифр в список целочисленногоПреобразование строки цифр в список целочисленных

типичный тест будет выглядеть

@Test 
    public void testGetListofIntegersFromString(){ 
     List<Integer> result = getIntegers("123456780"); 
     assertEquals(Arrays.asList(1,2,3,4,5,6,7,8,0),result); 
    } 

я написал ниже метод

List<Integer> getIntegers(String value) { 
     return IntStream.rangeClosed(0, value.length() - 1).map(i -> Integer.valueOf(value.substring(i,i+1))).collect(?????); 
    } 

Я застрял о том, какие функции для использования в get Список целых чисел Я пробовал collect(Collectors.toList()) Его давая ошибку компиляции.

Пожалуйста, предложите, если мы сможем следовать другим, чтобы решить эту проблему.

+0

Что ошибка компиляции? – Vulcan

+0

Я получаю как Ошибка: (61, 109) java: метод собирает в интерфейсе java.util.stream.IntStream не может применяться к заданным типам; требуется: 'java.util.function.Supplier , java.util.function.ObjIntConsumer , java.util.function.BiConsumer ' найдено: 'java.util.stream.Collector > ' Причина: не может быть введен тип-переменная R (списки фактических и формальных аргументов различаются по длине) –

+0

Вы пытались использовать [' mapToInt '] (http://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#mapToInt-java.util.function.ToIntFunction-) вместо' map'? – Vulcan

ответ

4

Использование String.chars():

"123456780".chars().map(c -> c-'0').boxed().collect(Collectors.toList()); 
+0

Почему бы не использовать это: c -> c - 48. – Kachna

+3

@ Win.ubuntu, потому что '' 0'' менее неясен для читателя. Я лично знаю много кодов ASCII как десятичных, так и шестнадцатеричных, но я думаю, что не более 10% программистов могут с готовностью ответить «какой символ соответствует коду ASCII 48». –

+3

@ Тагир Валеев: Правильно, даже если мы знаем коды, '48' не имеет преимущества перед' '0''. И * если * нам действительно нужно показать код, мы используем 'c -> c & 017' anyway ... – Holger

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