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