Java:处理从文件读取的流

Java:处理从文件读取的流,java,java-8,stream,java-stream,Java,Java 8,Stream,Java Stream,在我大学的一个实验室里,我正在用Java开发一个系统,它能够存储文件中的数据(以字符串形式给出文件路径)。我试图用路径上的一系列线条来处理这个问题,但我在早期阶段就被卡住了。文件组织如下:行的不同字段用“;”分隔,每行以“P”或“D”开头。根据此参数,我将使用该行的content创建一个“Patient”对象或“Doctor”对象,随后存储在两个不同的映射(patients或Doctor)中。我做了以下工作: Path p= Paths.get(path); Stream <String&

在我大学的一个实验室里,我正在用Java开发一个系统,它能够存储文件中的数据(以字符串形式给出文件路径)。我试图用路径上的一系列线条来处理这个问题,但我在早期阶段就被卡住了。文件组织如下:行的不同字段用“;”分隔,每行以“P”或“D”开头。根据此参数,我将使用该行的content创建一个“Patient”对象或“Doctor”对象,随后存储在两个不同的映射(patients或Doctor)中。我做了以下工作:

Path p= Paths.get(path);
Stream <String> lines=Files.lines(p, StandardCharsets.UTF_8);
lines.flatMap(l->Stream.of(l.split("; ")))....
Path p=Path.get(Path);
streamlines=Files.lines(p,StandardCharsets.UTF_8);
线条平面图(l->Stream.of(l.split(“;”))。。。。
我的想法是检查行开头的单词,根据这一点,剩余的元素将用作能够创建和存储相应对象(insertPatient或insertDoctor)的方法的参数。但我一点也不知道该怎么做。我知道做同样事情的不同方法,但我真的想使用流开发解决方案,至少在读取不同行的过程中。 谢谢 Gianluca.

try(streamlines=Files.lines(p,StandardCharsets.UTF_8)){//1
line.map(line->line.split(“;”)//2
.forEach(lineAsArray->{
if(lineAsArray[0]。等于(“D”)){
插入医生(lineAsArray);
}
else if(lineAsArray[0]。等于(“P”)){
插入病人(线状放射);
}
});
}
  • 使用try with resources确保流以及文件读取器已关闭
  • 不要使用flatMap,因为您希望对完整的行而不是单元格执行操作

  • 注意:与大多数Java API不同,如果未为
    文件.lines
    指定UTF-8,则默认为UTF-8。
    try (Stream<> lines = Files.lines(p, StandardCharsets.UTF_8)) { // 1
        lines.map(line -> line.split(";"))                          // 2
             .forEach(lineAsArray -> {
                 if (lineAsArray[0].equals("D")) {
                     insertDoctor(lineAsArray);
                 }
                 else if (lineAsArray[0].equals("P")) {
                     insertPatient(lineAsArray);
                 }
             });
    }