我想用流讀取文本文件并將其保存到數組中。假設我的文本文件看起來像這樣; KommentarG40 K88 F32H38; noch ein KommentarB55H33 K34 Bla77現在我想要一個看起來像這樣的數組或數組列表G40K88F32H38B55H33K34Bla77所以我想刪除以“;”開頭的行 并在一個空格后拆分其他所有內容。我像這樣嘗試: List<String> list = new ArrayList<>(); try (Stream<String> stream = Files.lines(Paths.get(path))) { list = stream .filter(line -> !line.startsWith(";")) // .map(string -> list.split(" ")) .map(String::toUpperCase) .collect(Collectors.toList()); } catch (IOException e) { e.printStackTrace(); } list.forEach(System.out::println);打?。篏40 K88 F32H38B55H33 K34 BLA77使用函數 .map(string -> list.split(" ")) 我會得到這個錯誤 The method split(String) is undefined for the type List<String>我是 Java 新手,經過數小時的搜索,我找不到答案。希望這里有人能給我一個提示。謝謝
3 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
要分割線并創建包含其元素的流,請使用
line -> Stream.of(line.split("\\s+"))
//OR
//line -> Arrays.stream(line.split("\\s+"))
這個 lambda 創建了Stream<String>但是如果我們將它與maplike 一起使用
map(line -> Stream.of(line.split("\\s+")))
我們會得到Stream<Stream<String>>。這不是我們想要的,因為我們不想“迭代”流,而是“迭代”它的元素。所以我們想要“扁平化”這個結構來得到Stream<String>.
這可以通過
flatMap(line -> Stream.of(line.split("\\s+")))

慕運維8079593
TA貢獻1876條經驗 獲得超5個贊
對于多合一的解決方案,請嘗試:
Files.lines(Paths.get("your/file/path"))
.filter(l -> !l.startsWith(";"))
.flatMap(l -> Arrays.stream(l.split("\n")))
.forEach(System.out::println);
添加回答
舉報
0/150
提交
取消