Как преобразовать массив строк в длинный массив в однострочном Java8? - PullRequest
0 голосов
/ 07 августа 2020

Я решаю задачу «Считать тройни» на HackerRank. https://www.hackerrank.com/challenges/count-triplets-1/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=dictionaries-hashmaps Он говорит, что я должен работать с массивом, хотя H C преобразует его в список. Я хочу преобразовать в массив вместо списка.

public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        String[] nr = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");

        int n = Integer.parseInt(nr[0]);

        long r = Long.parseLong(nr[1]);

        **List<Long> arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                .map(Long::parseLong)
                .collect(toList());**

        long ans = countTriplets(arr, r);

        bufferedWriter.write(String.valueOf(ans));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }

Ответы [ 2 ]

4 голосов
/ 07 августа 2020

Сделайте это следующим образом:

Long[] arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                .map(Long::parseLong)
                .collect(Collectors.toList())
                .toArray(Long[]::new);

Обновление:

Предоставлено Holger

Нет необходимости собирать в List как показано выше. Вы можете сделать это просто как

Long[] arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                .map(Long::parseLong)
                .toArray(Long[]::new);

или

long[] arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                .mapToLong(Long::parseLong) 
                .toArray()
0 голосов
/ 07 августа 2020

Используйте .toArray(Long[]::new) вместо .collect(Collectors.toList())

Long[] arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                   .map(Long::parseLong)
                   .toArray(Long[]::new);
...