Java 将带分隔符的字符串映射到字符串列表或新对象
我有一个文件,其中有些数据用分号分隔。我正在尝试构建一个流,它将逐行读取文件,分离每一列数据并将其映射到新对象 data.txt:Java 将带分隔符的字符串映射到字符串列表或新对象,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个文件,其中有些数据用分号分隔。我正在尝试构建一个流,它将逐行读取文件,分离每一列数据并将其映射到新对象 data.txt: John;Smith;42;shopassistant Clara;Lefleur;24;programmer Person.class: public class Person{ String name; String lastName; int age; String job; } 我是这样开始的: List<Person>
John;Smith;42;shopassistant
Clara;Lefleur;24;programmer
Person.class:
public class Person{
String name;
String lastName;
int age;
String job;
}
我是这样开始的:
List<Person> people = Files.lines(Paths.get("src/data.txt"))....
List people=Files.line(path.get(“src/data.txt”))。。。。
有什么想法吗?你可以像这样使用地图:
List<Person> people = Files.lines(Paths.get("src/data.txt"))
.map(p -> p.split(";"))//split each line with ';'
.map(p -> new Person(p[0], p[1], Integer.valueOf(p[2]), p[3]))//create a new Person
.collect(Collectors.toList());//then collect the result
Scanner
对这项工作更有用,而且由于java-9
这项工作更适合:
Pattern p = Pattern.compile("^(\\w+);(\\w+);(\\w+);(\\w+)$", Pattern.MULTILINE);
List<Person> persons = new Scanner(Paths.get("src/data.txt"))
.findAll(p)
.map(mr -> new Person(mr.group(1), mr.group(2), Integer.valueOf(mr.group(3)), mr.group(4)))
.collect(Collectors.toList());
Pattern p=Pattern.compile(“^(\\w+);(\\w+);(\\w+);(\\w+$”,Pattern.MULTILINE);
列表人员=新扫描仪(path.get(“src/data.txt”))
芬德尔先生(p)
.map(mr->newperson(mr.group(1)、mr.group(2)、Integer.valueOf(mr.group(3))、mr.group(4)))
.collect(Collectors.toList());
Great solution的可能副本。我不知道流在.map方法之后的行为,也没有发现我可以使用它两次。谢谢。欢迎使用@steve1337,因为map返回一个流
,所以您可以使用另一个map,依此类推on@YCF_L@Eugene是的,如果用户使用Java-9+,但我喜欢使用文件
,因为我可以使用takeWhile
、dropWhile
和许多其他更好的工具+1 anyway@YCF_L顺便说一句,你很幸运有一个字符正则表达式,否则,模式
应该在流本身之外采取……它更符合标准吗?@steve1337您的意思是什么?在(比如)代码审查期间,您希望看到哪种解决方案?@steve1337显然是这样。一个扫描器
就是这个开始的工具。
Pattern p = Pattern.compile("^(\\w+);(\\w+);(\\w+);(\\w+)$", Pattern.MULTILINE);
List<Person> persons = new Scanner(Paths.get("src/data.txt"))
.findAll(p)
.map(mr -> new Person(mr.group(1), mr.group(2), Integer.valueOf(mr.group(3)), mr.group(4)))
.collect(Collectors.toList());