Разделение целых чисел с помощью Stream Lambda - PullRequest
1 голос
/ 17 января 2020

Я изучал использование Stream и Lambda в Java8. Как бы вы go применили Stream и Lambda для следующего: Выведите нечетные целые числа в следующей строке: "[3, 6, 8, 96, 7, 23]", используя Stream и Lambda.

Я понял, что довольно просто использовать for для l oop и parseInt, но как реализовать потоки и лямбду?

Ответы [ 2 ]

4 голосов
/ 17 января 2020

Вы можете использовать подстроку с разделением следующим образом:

String str = "[3, 6, 8, 96, 7, 23]";
Arrays.stream(str.substring(1, str.length() - 1).split(", "))
        .filter(s -> Integer.valueOf(s) % 2 != 0)
        .forEach(System.out::println);

Или, если вы хотите получить массив, вы можете использовать toArray примерно так:

.toArray(String[]::new);

Или, если вы хотите получить массив целых чисел, вы можете использовать карту, а затем фильтр, например, так:

Integer[] array = Arrays.stream(str.substring(1, str.length() - 1).split(", "))
        .map(Integer::valueOf)
        .filter(i -> i % 2 != 0)
        .toArray(Integer[]::new);

Выходы

3
7
23
1 голос
/ 17 января 2020

Преобразование строки в строку [] путем разделения ее на "[", "]", "" и ",", а затем фильтрация пустых значений и нечетных целых чисел

Arrays.stream("[3, 6, 8, 96, 7, 23]".split("[,\\s\\[\\]]"))
.filter(s->!s.isBlank() && Integer.valueOf(s)%2!=0)
.forEach(s-> System.out.println(s));
...