Как я могу прочитать целые числа, разделенные newLine, используя Stream? - PullRequest
1 голос
/ 01 апреля 2019

Я хочу прочитать несколько целых чисел, разделенных newLines, используя Stream. Я определенно знаю, как сделать это со сканером, но я пытаюсь выяснить потоки. Мой вход будет представлять собой целое число, первое целое число n определит, сколько строк будет следовать.

5
1
2
3
4
5

Я запутался в назначении InputStreamReader. Могу ли я использовать его для чтения ввода от пользователя? У него есть метод read и перегруженная версия. Я думал, что мог бы использовать перегруженный метод, чтобы сохранить значения в массиве, а затем, суммировать их, найти среднее и все такое. Но это

try(InputStreamReader isr = new InputStreamReader(System.in)){
        int n = isr.read();
        int count =0;
        isr.read(char[] cbuf, 0, n);

    }

не работает. Как вы, наверное, догадываетесь, я совершенно не знаком с потоками. Обычно я согласен с книгой, которую я читаю (Ivor Horton "Beginning Java"), документами по Java и прочим, которые другие люди спрашивали здесь, но не в этот раз. Мне не удалось найти подходящие учебники или что-то еще, возможно, потому что я не знаю, каков мой точный вопрос. Буду признателен за любые объяснения, но полезные ссылки или литературу. Louis

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Вы можете использовать BufferedReader, что дает вам readLine() метод, аналогичный Scanner.nextLine():

public static void main(String[] args) throws Exception {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
        int n = Integer.parseInt(reader.readLine());
        System.out.println(n);
        while (n-- > 0) {
            int i = Integer.parseInt(reader.readLine());
            System.out.println(i);
        }
    }
}
0 голосов
/ 05 июня 2019

Метод Files.readAllLines считывает данные из файла и возвращает список строк, по одной на каждую строку, которые можно легко превратить в фактический Поток . Чтобы прочитать все числа из файла и распечатать их, код может быть простым:

Files.readAllLines(Paths.get("data.txt")).stream().forEach(System.out::println);

Обратите внимание, что этот метод объявляет бросить IOException, который должен быть перехвачен или объявлен. Если порядок, в котором печатаются числа, имеет значение, можно использовать метод forEachOrdered.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...