Как разбить список - PullRequest
       3

Как разбить список

1 голос
/ 12 июня 2019

У меня есть ArrayList, который заполняется из входного файла строка за строкой. Здесь одна строка - это один индекс, поэтому мне нужно разделить это на слова, потому что я этого не хочу. Может кто-нибудь объяснить мне, как это сделать? Я предпочитаю использовать списки, а не массивы между прочим.

    Scanner data = new Scanner(new File("C:\\X\\X.txt"));
    Scanner data2 = new Scanner(new File("C:\\Y\\Y.txt"));

    List<String> file1 = new ArrayList<>(write1(data));
    List<String> file2 = new ArrayList<>(write2(data2));

Фактический вывод:

[Ian Kowalsky 2000, Pit Johnson 2001, Adam Todd 1999]

Ожидаемая:

[Ian, Kowalsky, 2000, Pit, Johnson, 2001, Adam, Todd, 1999]

Ответы [ 3 ]

4 голосов
/ 12 июня 2019

Если вам нужно создать новый список, в котором элементами являются слова из предыдущего списка фраз, вы можете сделать:

list.stream()                           // [Ian Kowalsky 2000, Pit Johnson 2001, Adam Todd 1999]
   .map(phrase -> phrase.split("\\s+")) // [[Ian, Kowalsky, 2000], [Pit, Johnson, 2001], [Adam, Todd, 1999]]
   .flatMap(Arrays::stream)             // [Ian, Kowalsky, 2000, Pit, Johnson, 2001, Adam, Todd, 1999]
   .collect(Collectors.toList());

Проверьте документацию для flatMap в здесь.

1 голос
/ 12 июня 2019

Если вы используете Java 8, вы можете использовать:

List<String> result = lines.stream()
        .flatMap(line -> Arrays.stream(line.split("\\s+")))
        .collect(Collectors.toList());
0 голосов
/ 12 июня 2019

Если вы просто хотите разбить каждую строку на слова и можете использовать java8 +, попробуйте это:

Загрузите строки с помощью Files.lines, а затем просто используйте String.split, чтобы разбить ваши строки на слова ... Примерно так:

List<String> words = Files.lines(file).flatMap(line -> Stream.of(line.split("\\s+"))).collect(Collectors.toList());
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class WordsOfFiles {

    public static void main(String[] args) throws IOException {
        List<String> words = Files.lines(new File("X.txt").toPath()).flatMap(line -> Stream.of(line.split("\\s+"))).collect(Collectors.toList());
        words.forEach(System.out::println);

    }
}

НТН!

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