java 列表只返回最后一个元素
java list returning last element only
我有一个 pojo,我试图从一个 csv 文件中读取数据到一个列表中,然后将其打印出来。
从文件中读取工作正常,在 read/add 的瞬间,我可以看到正确的 ID 正在被拾取,但是一旦我尝试将其全部打印回来,我只得到列表的最后一个元素。
以下是我正在尝试的:
public static void main(String[] args) throws IOException, ParseException{
Charset charset = Charset.forName("UTF-8");
File dir = new File("/Users/vinnar/eclipse_keplar/workspace/vinnar-pojo-projects/src/com/vinnar/pojo/csvfiles");
File file = null;
file = new File(dir.getCanonicalPath()
+ File.separator
+ "Teams.csv");
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis, charset));
String line = null;
Team team = new Team();
List<Team> teams = new ArrayList<Team>();
String csvSeperator = ",";
while ((line=br.readLine()) != null){
String[] t = line.split(csvSeperator);
System.out.println("Team ID is: " + t[0]);
team.setId(Integer.parseInt(t[0]));
team.setName(t[1]);
team.setRank(Integer.parseInt(t[2]));
team.setLstUpdUser(t[3]);
DateFormat dateFormat = new SimpleDateFormat("mm/dd/yyyy", Locale.ENGLISH);
team.setLstUpdTime((Date) dateFormat.parse(t[4]));
teams.add(team);
}
br.close();
for(Team t1:teams){
System.out.println("Team info: " + t1.getId());
}
}
我从上面得到的输出是:
团队 ID 是:1
团队 ID 是:2
团队 ID 是:3
团队 ID 是:4
团队信息:4
团队信息:4
团队信息:4
团队信息:4
我错过了什么..?为什么前 3 个元素丢失了..?
您在循环之前只创建了一个 Team 对象。你一直用读取的条目替换它的内容,所以它只代表最后一行。然后你用同一个对象多次列出了填充。在循环内创建团队。
这是因为您在循环中添加相同的对象,您应该在循环中创建对象以将其添加到列表中:
Team team;
while ((line=br.readLine()) != null){
team = new Team();//new object
teams.add(team);//added to list
...
}
我有一个 pojo,我试图从一个 csv 文件中读取数据到一个列表中,然后将其打印出来。 从文件中读取工作正常,在 read/add 的瞬间,我可以看到正确的 ID 正在被拾取,但是一旦我尝试将其全部打印回来,我只得到列表的最后一个元素。 以下是我正在尝试的:
public static void main(String[] args) throws IOException, ParseException{
Charset charset = Charset.forName("UTF-8");
File dir = new File("/Users/vinnar/eclipse_keplar/workspace/vinnar-pojo-projects/src/com/vinnar/pojo/csvfiles");
File file = null;
file = new File(dir.getCanonicalPath()
+ File.separator
+ "Teams.csv");
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis, charset));
String line = null;
Team team = new Team();
List<Team> teams = new ArrayList<Team>();
String csvSeperator = ",";
while ((line=br.readLine()) != null){
String[] t = line.split(csvSeperator);
System.out.println("Team ID is: " + t[0]);
team.setId(Integer.parseInt(t[0]));
team.setName(t[1]);
team.setRank(Integer.parseInt(t[2]));
team.setLstUpdUser(t[3]);
DateFormat dateFormat = new SimpleDateFormat("mm/dd/yyyy", Locale.ENGLISH);
team.setLstUpdTime((Date) dateFormat.parse(t[4]));
teams.add(team);
}
br.close();
for(Team t1:teams){
System.out.println("Team info: " + t1.getId());
}
}
我从上面得到的输出是:
团队 ID 是:1
团队 ID 是:2
团队 ID 是:3
团队 ID 是:4
团队信息:4
团队信息:4
团队信息:4
团队信息:4
我错过了什么..?为什么前 3 个元素丢失了..?
您在循环之前只创建了一个 Team 对象。你一直用读取的条目替换它的内容,所以它只代表最后一行。然后你用同一个对象多次列出了填充。在循环内创建团队。
这是因为您在循环中添加相同的对象,您应该在循环中创建对象以将其添加到列表中:
Team team;
while ((line=br.readLine()) != null){
team = new Team();//new object
teams.add(team);//added to list
...
}