【问题标题】:Create Object from txt file without hard coding every object从 txt 文件创建对象,无需对每个对象进行硬编码
【发布时间】:2021-02-17 18:41:09
【问题描述】:

我正在处理一个问题,其中我有一个需要转换为对象的 txt 文件。我的文件格式是:

阿拉巴马州::蒙哥马利::205764::155.4

州名和首都将作为 加载到哈希图中。我已经成功加载了 Hashmap,但现在我需要创建每个单独的 Capital 对象。想知道是否有办法做到这一点,而无需对每个资本对象进行硬编码。也许是一个循环?不知道如何在不硬编码的情况下命名它们。

这是我目前的主要方法:

 public static void main(String[] args) throws Exception {
    
    Scanner fileReader = new Scanner(new BufferedReader(new FileReader("MoreStateCapitals.txt")));
    Map<String, Object> stateCapitals = new HashMap<>();
    
    while (fileReader.hasNextLine()) {
        String[] columns = fileReader.nextLine().split("::");
        stateCapitals.put(columns[0], columns[1]);
    }
    
    Set<String> states = stateCapitals.keySet();
    Collection<Object> capitals = stateCapitals.values();
    
    
}

这是我的 Capital 类,带有 getter、setter 和 Constructor

    
    private String name;
    private int population;
    private double squareMileage;

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public int getPopulation() {
        return population;
    }
    
    public void setPopulation(int population){
        this.population = population;
    }

    public double getSquareMileage() {
        return squareMileage;
    }
    
    public void setSquareMileage(double squareMileage){
        this.squareMileage = squareMileage;
    }

    public Capital(String name, int population, double squareMileage) {
        this.name = name;
        this.population = population;
        this.squareMileage = squareMileage;
    }
    
}

编辑:txt文件中的第一个值唯一用于hashmap中的键,它不参与对象的创建

【问题讨论】:

  • 你的Capital 对象有一个构造函数,你应该在循环中为每一行调用它。您是编写代码还是只是从某个地方下载它?如果你真的写了它,我不确定问题是什么。如果您没有编写代码,那么您的问题在这里是题外话。 StackOverflow 不是论坛、教程或代码编写服务。

标签: java object constructor hashmap unmarshalling


【解决方案1】:

我相信你需要换行:

stateCapitals.put(columns[0], columns[1]);

进入

stateCapitals.put(columns[0], new Capital(columns[1], Integer.parseInt(columns[2]), Double.parseDouble(columns[3]));

这样你将使用你的构造函数来创建对象。这假设您从中读取数据的文件中没有错误 - 如果文件不正确,您可能需要在创建/插入步骤之前分析这些行。

此外,即使您的 CollectionObject 可以工作,您可能希望将其更改为 Collection&lt;Capitals&gt; 以便能够访问您类的所有方法。

我希望它有所帮助。祝你好运。

【讨论】:

  • 谢谢,我认为这行得通。我当时真的只使用 Collection 来遍历地图的值,以确保我正确设置了它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多