如何分割清单

时间:2019-06-12 19:22:09

标签: java list

我有一个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 个答案:

答案 0 :(得分:4)

如果您需要创建一个新列表,其中元素是上一个短语列表中的单词,则可以执行以下操作:

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());

here中查看flatMap的文档。

答案 1 :(得分:1)

如果您使用的是Java 8,则可以使用:

List<String> result = lines.stream()
        .flatMap(line -> Arrays.stream(line.split("\\s+")))
        .collect(Collectors.toList());

答案 2 :(得分:0)

如果您只想将每一行都分成单词,并且可以使用java8 +,请尝试以下方法:

通过Factory<Bob>加载行,然后简单地使用Files.lines将行爆炸成单词...类似这样:

String.split
List<String> words = Files.lines(file).flatMap(line -> Stream.of(line.split("\\s+"))).collect(Collectors.toList());

HTH!