Внесение изменений определенного элемента ArrayList
есть массив:
public static ArrayList<StatisticInfo> listStatic = new ArrayList<>();
который заполняется данными имени сессии, времени старта и окончания из двух методов, и уровень вложенности со значением 0, далее идет метод:
private static void findParent() {
listStatic.get(0).setLevel(1);
for (int i = 1; i < listStatic.size()-1; i++) {
int idLevel = listStatic.get(i-1).level;
long endPrevTime = listStatic.get(i-1).endTime;
long startCurrentTime = listStatic.get(i).startTime;
long startNextTime = listStatic.get(i+1).startTime;
String previousName = listStatic.get(i-1).sectionName;
String currentName = listStatic.get(i).sectionName;
if (!(previousName.equals(currentName)) && startCurrentTime < endPrevTime){
listStatic.get(i).setLevel(idLevel+1);
} else if (previousName.equals(currentName) && startCurrentTime == endPrevTime){
listStatic.get(i).setLevel(idLevel);
} else if (!(previousName.equals(currentName)) && startCurrentTime == endPrevTime && startCurrentTime < startNextTime && listStatic.get(i).level == 0){
listStatic.get(i).setLevel(idLevel);
}
}
}
в котором надо через сравнение имён и времени старта/окончания определить уровень вложенности и изменить нулевое значение в ArrayList на рассчитанное. Внутри метода расчет происходит, если вывести результаты в консоль из метода, то также верно отображается, а вот если ввести в консоль ArrayList, то в нем нет изменений. Что не так?
пробовал через метод:
listStatic.set();
но никак не смог понять, как изменить не всю строку по индексу, а только определенное значение.
В методе main ArrayList вывожу так:
for (StatisticInfo statisticInfo : listStatic) {
System.out.println(statisticInfo);
}
System.out.println();
в консоли получаю следующее:
StatisticInfo{sectionName=session-1, fullTime=0, selfTime=0, count=1, startTime=1582803526932, endTime=1582803527856, duration=924, level=1}
StatisticInfo{sectionName=session-2, fullTime=0, selfTime=0, count=1, startTime=1582803526964, endTime=1582803527071, duration=107, level=2}
и т.д...
содержимое файла StatisticInfo:
public String sectionName;
public int fullTime;
public int selfTime;
public int count = 1;
public long startTime = 0;
public long endTime;
public long duration;
public int level = 0;
public StatisticInfo(String name) {
this.sectionName = name;
}
public String getSectionName() {
return sectionName;
}
public int getCount() {
return count;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public long getStartTime() {
return startTime;
}
public void setEndTime(long endTime) {
this.endTime = endTime;
setDuration(getEndTime() - getStartTime());
}
public long getEndTime() {
return endTime;
}
public void setDuration(long duration) {
this.duration = duration;
}
public long getDuration() {
return duration;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
UPD: разобрался. выше описанный метод передал далее:
for (StatisticInfo info : findParent()) {
и все заработало как мне надо.