Odczyt słów z pliku

0

cześć,

poniższy konstruktor (argument File) tworzy obiekt posiadający List<string> sortedWords. Mam problem, żeby przekształcić kod w taki sposób żeby kontruktor dodawał do listy nie całe linijki ale każde słowo z osobna. Próbowałem metodę .split("") niestety nie udało mi się napisać poprawnej metody.

  public SortedWordsFromFile(File file) throws IOException {
        sortedWords = new ArrayList<>();
        try {
            FileReader in = new FileReader(file);
            BufferedReader br = new BufferedReader(in);
            String line = br.readLine();
            while (line != null) {
                sortedWords.add(line);
                line = br.readLine();
            }
            Collections.sort(sortedWords);
            br.close();
           //tutaj próbowałem metody .split (" ") i wyskakiwał NullPointerException
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
2

Chcesz odczytać z pliku słowa i posortować alfabetycznie?

        List<String> data = Files.lines(Paths.get("input.txt"))
                .map(x -> x.split(" "))
                .flatMap(Arrays::stream)
                .collect(Collectors.toList());
        Collections.sort(data);
0

dokładnie o to chodzi. Jeszcze nie za bardzo sznam stream Javy, ale akurat dobra okazja żeby przeanalizować ten sposób. Dziękuję

1

Wielkiej filozofii tam nie ma ;) lines() zwraca strumień linii z pliku, map na każdej linii wywołuje split więc każdą linię zamienia na tablicę słów, następnie Arrays.stream() każdą taką tablicę słów zamienia na strumień słów, a flatMap() składa te wszystkie strumienie w jeden, na koniec collect zbiera cały wielki strumień słów do listy ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1