Java - 类型不匹配:无法从元素类型String []转换为List <string>

时间:2017-02-11 02:11:30

标签: java

我不熟悉getter和setter(基本上只是Java)但我必须使用它们来完成这项任务,所以如果我做错了那些请告诉我。

更重要的问题是我在我的方法上遇到的错误。我正在为我正在研究的特定方法分配的单词指令是:

  

您的processData()方法应该从您的ArrayList获取所有记录数据,并通过您的setter将数据添加到每个实例字段中。

但我一直收到错误消息:

  

类型不匹配:无法从元素类型String []转换为List

在单词内容上写着“for (List<String> rowData: content)”的行。

非常感谢你给我的任何帮助。

到目前为止我的代码:

public abstract class Client {

  String file = "bank-Detail.csv";
  ArrayList<String[]> bank = new ArrayList<>();
  static Client o[] = new Client[12];

  public Client(String file) {
    this.file = file;
  }

  private String ID;
  private String Age;
  private String Sex;
  private String Region;
  private String Income;
  private String Married;
  private String Children;
  private String Car;
  private String Save_Act;
  private String Current_Act;
  private String Mortgage;
  private String Pep;

  public List<String[]> readData() throws IOException {
    //initialize variable
    int count = 0;
    //name file
    String file = "bank-Detail.txt";

    //make array list
    List<String[]> content = new ArrayList<>();

    //trycatch for exceptions
    try {
      //file reader
      BufferedReader br = new BufferedReader(new FileReader(file));
      //string to add lines to
      String line = "";
      while ((line = br.readLine()) != null) {
        content.add(line.split(","));
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }

    processData(content);
    return content;
  }

  public String getID() {
    return ID;
  }

  public void setID(String ID) {
    this.ID = ID;
  }

  public String getAge() {
    return Age;
  }

  public void setAge(String age) {
    this.Age = age;
  }

  public String getSex() {
    return Sex;
  }

  public void setSex(String sex) {
    Sex = sex;
  }

  public String getRegion() {
    return Region;
  }

  public void setRegion(String region) {
    Region = region;
  }

  public String getIncome() {
    return Income;
  }

  public void setIncome(String income) {
    Income = income;
  }

  public String getMarried() {
    return Married;
  }

  public void setMarried(String married) {
    Married = married;
  }

  public String getChildren() {
    return Children;
  }

  public void setChildren(String children) {
    Children = children;
  }

  public String getCar() {
    return Car;
  }

  public void setCar(String car) {
    Car = car;
  }

  public String getSave_Act() {
    return Save_Act;
  }

  public void setSave_Act(String save_Act) {
    Save_Act = save_Act;
  }

  public String getCurrent_Act() {
    return Current_Act;
  }

  public void setCurrent_Act(String current_Act) {
    this.Current_Act = current_Act;
  }

  public String getMortgage() {
    return Mortgage;
  }

  public void setMortgage(String mortgage) {
    this.Mortgage = mortgage;
  }

  public String getPep() {
    return Pep;
  }

  public void setPep(String pep) {
    Pep = pep;
  }

  public String toString() {
    return "[ID = " + ", age=";

    /// ect....
  }

  public void processData(List<String[]> content) {

    int index = 0;
    for (List<String> rowData : content) {
      //initialize array of objects
      //o[index] = new Client();

      //use setters to populate your array of objects
      o[index].setID(rowData.get(0));
      o[index].setAge(rowData.get(1));
      o[index].setRegion(rowData.get(3));
      o[index].setSex(rowData.get(2));
      o[index].setIncome(rowData.get(4));
      o[index].setMarried(rowData.get(5));
      o[index].setChildren(rowData.get(6));
      o[index].setCar(rowData.get(7));
      o[index].setSave_Act(rowData.get(8));
      o[index].setCurrent_Act(rowData.get(9));
      o[index].setMortgage(rowData.get(10));
      o[index].setPep(rowData.get(11));

      System.out.println(rowData);

      index++;
    }
  }

  public void printData() {
  }
}

2 个答案:

答案 0 :(得分:0)

由于您的错误提示为... contentList<String[]>,因此它包含String[]个元素,而不是List<String>元素。

如果您的最终目标是Client个对象的列表,请改为使用方法List<Client> readData()

List<Client> clients = new ArrayList<Client>();

BufferedReader br = null;
try {
    //file reader
    br = new BufferedReader(new FileReader(file));
    //string to add lines to
    String line = "";
    Client c = null;
    while ((line = br.readLine()) != null) {
        c = new Client();
        String[] rowData = line.split(",");
        c.setID(rowData.get(0));
        ...

        clients.add(c);
    }
} catch (FileNotFoundException e) {
  e.printStackTrace();
} finally {
    try {
        if (br != null) br.close();
    } catch (Exception e) {}
}  

return clients;

答案 1 :(得分:0)

问题出在processData方法中。 content的类型为List<String[]>。因此,当您尝试循环此列表时,每个元素都是String array,而不是List。此外,由于列表中的每个元素都是一个String数组,因此可以使用常规数组方括号而不是List的get方法来访问列表中每个String Array元素的元素。请尝试以下修复:

public void processData(List<String[]> content) {

    int index=0;
    for (String[] rowData: content){
        //initialize array of objects   
        //o[index] = new Client();

        //use setters to populate your array of objects
        o[index].setID(rowData[0]);
        o[index].setAge(rowData[1]);
        o[index].setRegion(rowData[3]);
        o[index].setSex(rowData[2]);
        o[index].setIncome(rowData[4]);
        o[index].setMarried(rowData[5]);
        o[index].setChildren(rowData[6]);
        o[index].setCar(rowData[7]);
        o[index].setSave_Act(rowData[8]);
        o[index].setCurrent_Act(rowData[9]);
        o[index].setMortgage(rowData[10]);
        o[index].setPep(rowData[11]);

        System.out.println(rowData);

        index++;
        }
}