Java 使用流从csv文件通过生成器创建对象
我想使用PlanetBuilder和stream从.csv文件创建一个“Planet”对象。到目前为止,我只能读取csv文件,并为每一行创建一个行星对象,但不幸的是,我不知道如何为对象分配构造函数值,所以它基本上只为每一行创建一个空行星对象。有人能告诉我如何分配每行的值吗 创建对象后,我将它们添加到行星列表中 这是创建新行星对象的方法Java 使用流从csv文件通过生成器创建对象,java,Java,我想使用PlanetBuilder和stream从.csv文件创建一个“Planet”对象。到目前为止,我只能读取csv文件,并为每一行创建一个行星对象,但不幸的是,我不知道如何为对象分配构造函数值,所以它基本上只为每一行创建一个空行星对象。有人能告诉我如何分配每行的值吗 创建对象后,我将它们添加到行星列表中 这是创建新行星对象的方法 public List<Planet> csvDataToPlanets(String filePath) { List<Planet&
public List<Planet> csvDataToPlanets(String filePath) {
List<Planet> planets = new ArrayList<>();
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
List<List<String>> places = lines.skip(1).map(line -> Arrays.asList(line.split(","))).collect(Collectors.toList());
places.forEach(place -> new PlanetBuilder().createPlanet());
} catch (IOException e) {
e.printStackTrace();
}
return planets;
}
还有我的行星班和飞机制造班
public class Planet {
private String name;
private long inhabitants;
private boolean stargateAvailable;
private boolean dhdAvailable;
private List<String> teamsVisited;
public Planet(String name, long inhabitants, boolean stargateAvailable, boolean dhdAvailable, List<String> teamsVisited) {
}
public String getName() {
return name;
}
public long getInhabitants() {
return inhabitants;
}
public boolean isStargateAvailable() {
return stargateAvailable;
}
public boolean isDhdAvailable() {
return dhdAvailable;
}
public List<String> getTeamsVisited() {
return teamsVisited;
}
@Override
public String toString() {
return name;
}
public class PlanetBuilder {
private String name;
private long inhabitants;
private boolean stargateAvailable;
private boolean dhdAvailable;
private List<String> teamsVisited;
public PlanetBuilder Name(String name) {
this.name = name;
return this;
}
public PlanetBuilder Inhabitants(long inhabitants) {
this.inhabitants = inhabitants;
return this;
}
public PlanetBuilder StargateAvailable(boolean stargateAvailable) {
this.stargateAvailable = stargateAvailable;
return this;
}
public PlanetBuilder DhdAvailable(boolean dhdAvailable) {
this.dhdAvailable = dhdAvailable;
return this;
}
public PlanetBuilder TeamsVisited(List<String> teamsVisited) {
this.teamsVisited = teamsVisited;
return this;
}
public Planet createPlanet() {
return new Planet(name, inhabitants, stargateAvailable, dhdAvailable, teamsVisited);
}
公共级行星{
私有字符串名称;
私人长期居民;
私有布尔stargate可用;
私有布尔dhdavaailable;
访问私人名单团队;
公共行星(字符串名称、长居民、布尔星门可用、布尔dhdAvailable、列表团队可视){
}
公共字符串getName(){
返回名称;
}
公众长期服务{
返回居民;
}
公共布尔值IsTargetAvailable(){
返回星门可用;
}
公共布尔值可用(){
返回dhdavaailable;
}
公共列表getTeamsVisited(){
返回团队访问;
}
@凌驾
公共字符串toString(){
返回名称;
}
公共级飞机制造者{
私有字符串名称;
私人长期居民;
私有布尔stargate可用;
私有布尔dhdavaailable;
访问私人名单团队;
公共平面生成器名称(字符串名称){
this.name=名称;
归还这个;
}
公共飞机制造商居民(长居民){
这个。居民=居民;
归还这个;
}
公共平面生成器StargateAvailable(布尔StargateAvailable){
this.stargateavable=stargateavable;
归还这个;
}
公共平面生成器DhdAvailable(布尔DhdAvailable){
this.dhdavaailable=dhdavaailable;
归还这个;
}
公共飞机建造商团队已访问(列表团队已访问){
this.teamsVisited=teamsVisited;
归还这个;
}
公共行星createPlanet(){
返回新行星(名称、居民、星门可用、dhdAvailable、团队访问);
}
最简单的答案是,您可以扩展places.forEach(place->…)
调用中的逻辑,这样您就可以从place
(是值的列表)中获取每个值,并为每个属性在构建器上添加调用(根据需要对它们进行解析)。例如places.forEach(place->new PlanetBuilder().Name(place.get(0)).createPlanet());
(本例中无需解析)
然而,这绝对不是最好的解决方案
理想情况下,您可以使用类似的库或为您处理解组。哇,我在这里被困了3天,非常感谢。
public class Planet {
private String name;
private long inhabitants;
private boolean stargateAvailable;
private boolean dhdAvailable;
private List<String> teamsVisited;
public Planet(String name, long inhabitants, boolean stargateAvailable, boolean dhdAvailable, List<String> teamsVisited) {
}
public String getName() {
return name;
}
public long getInhabitants() {
return inhabitants;
}
public boolean isStargateAvailable() {
return stargateAvailable;
}
public boolean isDhdAvailable() {
return dhdAvailable;
}
public List<String> getTeamsVisited() {
return teamsVisited;
}
@Override
public String toString() {
return name;
}
public class PlanetBuilder {
private String name;
private long inhabitants;
private boolean stargateAvailable;
private boolean dhdAvailable;
private List<String> teamsVisited;
public PlanetBuilder Name(String name) {
this.name = name;
return this;
}
public PlanetBuilder Inhabitants(long inhabitants) {
this.inhabitants = inhabitants;
return this;
}
public PlanetBuilder StargateAvailable(boolean stargateAvailable) {
this.stargateAvailable = stargateAvailable;
return this;
}
public PlanetBuilder DhdAvailable(boolean dhdAvailable) {
this.dhdAvailable = dhdAvailable;
return this;
}
public PlanetBuilder TeamsVisited(List<String> teamsVisited) {
this.teamsVisited = teamsVisited;
return this;
}
public Planet createPlanet() {
return new Planet(name, inhabitants, stargateAvailable, dhdAvailable, teamsVisited);
}