Java 使用流从csv文件通过生成器创建对象

Java 使用流从csv文件通过生成器创建对象,java,Java,我想使用PlanetBuilder和stream从.csv文件创建一个“Planet”对象。到目前为止,我只能读取csv文件,并为每一行创建一个行星对象,但不幸的是,我不知道如何为对象分配构造函数值,所以它基本上只为每一行创建一个空行星对象。有人能告诉我如何分配每行的值吗 创建对象后,我将它们添加到行星列表中 这是创建新行星对象的方法 public List<Planet> csvDataToPlanets(String filePath) { List<Planet&

我想使用PlanetBuilder和stream从.csv文件创建一个“Planet”对象。到目前为止,我只能读取csv文件,并为每一行创建一个行星对象,但不幸的是,我不知道如何为对象分配构造函数值,所以它基本上只为每一行创建一个空行星对象。有人能告诉我如何分配每行的值吗

创建对象后,我将它们添加到行星列表中

这是创建新行星对象的方法

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);
}