我想用流读取文本文件并将其保存到数组中。假设我的文本文件看起来像这样; 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);打印:G40 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
提交
取消