[英]Serialization of ArrayList containing multiple objects, doesn't save object state
[英]ArrayList as Object attribute doesn't save values
我有一个具有以下属性的对象:
public class Club {
private String name;
private ArrayList<Integer> points;
private int average;
Club(String name, ArrayList<Integer> points, int average){
this.name = name;
this.points = new ArrayList<>();
this.average = average;
我尝试用来自txt文件的数据点填充arraylist:
while((currentLine = br.readLine()) != null){
String name;
ArrayList<Integer> points = new ArrayList<>();
int average;
String[] clubData = currentLine.split(",");
name = clubData[0];
int score2 = Integer.parseInt(clubData[2]);
int score3 = Integer.parseInt(clubData[3]);
int score4 = Integer.parseInt(clubData[4]);
int score5 = Integer.parseInt(clubData[5]);
points.add(score2);
points.add(score3);
points.add(score4);
points.add(score5);
average = points.stream().mapToInt(Integer::intValue).sum()/4;
Club club = new Club(name, points, average);
当我打印对象时,得到以下信息:
Name: Clubname Points: [] Average: 6
因此,文件的值将保存在列表中。 因为计算了平均值(6),所以这是一个好值。 但是,对象本身的列表“点”为空。 谁能向我解释一下?
您在Club类中的构造函数每次都会创建一个新的ArrayList。 改成这个
Club(String name, ArrayList<Integer> points, int average){
this.name = name;
this.points = points;
this.average = average;
您的构造函数忽略了points
。
复制列表(浅复制):
this.points = new ArrayList<>(points);
或保留对现有列表的引用:
this.points = points;
此外,您当前正在使用Java的整数除法来计算平均值。 在这里看起来像是已经解决了,因为您没有抱怨平均值不正确,但是通常您希望将average
保持为double
并除以4.0
的double
常量:
average = points.stream().mapToInt(Integer::intValue).sum()/4.0;
此外, IntStream
以为您提供平均计算。 average
方法返回OptionalDouble
:
average = points.stream().mapToInt(Integer::intValue).average().getAsDouble();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.