Java 我正在更改对象的一部分,但它会在不考虑条件集的情况下不断更改列表中的所有对象

Java 我正在更改对象的一部分,但它会在不考虑条件集的情况下不断更改列表中的所有对象,java,arrays,arraylist,lambda,Java,Arrays,Arraylist,Lambda,我正在尝试将每个课程组的每个星期一的第1个周期设置为true,但对象会更改所有天,而不仅仅是星期一。请检查下面的示例 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; class HelloWorld { public static void main(String[] args) { SchoolObje

我正在尝试将每个课程组的每个星期一的第1个周期设置为true,但对象会更改所有天,而不仅仅是星期一。请检查下面的示例

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Objects;

class HelloWorld {



    public static void main(String[] args) {
        SchoolObject schoolObject;
        List<LecturePeriod> lecturePeriods = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            String periodName = "Period " + i;
            int periodNo = i;
            boolean isPeriodAllocated = false;
            lecturePeriods.add(new LecturePeriod(periodName, periodNo, isPeriodAllocated));
        }

        List<Day> days = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            String dayName;
            switch (i) {
                case 1:
                    dayName = "MONDAY";
                    break;
                case 2:
                    dayName = "TUESDAY";
                    break;
                case 3:
                    dayName = "WEDNESDAY";
                    break;
                case 4:
                    dayName = "THURSDAY";
                    break;
                case 5:
                    dayName = "FRIDAY";
                    break;
                default:
                    dayName = "NONE";
            }

            int dayNo = i;
            days.add(new Day(dayName, dayNo, lecturePeriods));
        }

        List<YearGroup> yearGroups = new ArrayList<>();
        for (int i = 1; i <= 3; i++) {
            int yearGroupNumber = i;
            if (Objects.equals(i, 1)) {
                yearGroups.add(new YearGroup(yearGroupNumber, new ArrayList<>(Arrays.asList(new CourseGroup("Science" + 1, days)))));
            } else if (Objects.equals(i, 2)) {
                yearGroups.add(new YearGroup(yearGroupNumber, new ArrayList<>(Arrays.asList(new CourseGroup("Science" + 2, days)))));
            } else if (Objects.equals(i, 3)) {
                yearGroups.add(new YearGroup(yearGroupNumber, new ArrayList<>(Arrays.asList(new CourseGroup("Science" + 3, days)))));
            }

        }

        schoolObject = new SchoolObject();
        schoolObject.setYearGroups(yearGroups);
        System.out.println("School Object Before Changing Periods="+schoolObject.toString());

        schoolObject.getYearGroups().forEach(yearGroup -> {
            yearGroup.getCourseGroups().forEach(courseGroup -> {
                courseGroup.getDays().forEach(day -> {
                    String dayName = day.getDayName();
                    if (Objects.equals(dayName, "MONDAY")) {
                        day.getLecturePeriods().forEach(lecturePeriod -> {
                            int lecturePeriodNumber = lecturePeriod.getPeriodNumber();
                            if (Objects.equals(lecturePeriodNumber, 1)) {
                                lecturePeriod.setIsPeriodAllocated(true);

                            }
                        });
                    }
                });
            });
        });
        System.out.println("\nSchool Object After Changing Periods=" + schoolObject.toString());
        final int[] numberOfAllocatedPeriodsExpected = {0};
        schoolObject.getYearGroups().forEach(yearGroup -> {
            yearGroup.getCourseGroups().forEach(courseGroup -> {
                courseGroup.getDays().forEach(day -> {
                    day.getLecturePeriods().forEach(lecturePeriod -> {
                        int lecturePeriodNumber = lecturePeriod.getPeriodNumber();
                        if (Objects.equals(lecturePeriodNumber, 1)) {
                            numberOfAllocatedPeriodsExpected[0]++;
                        }
                    });
                });
            });
        });


        System.out.println("\nTest result ="+Objects.equals(numberOfAllocatedPeriodsExpected[0],3));

    }




    public static class SchoolObject {
        List<YearGroup> yearGroups;

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("SchoolObject{");
            sb.append("yearGroups=").append(yearGroups);
            sb.append('}');
            return sb.toString();
        }

        public List<YearGroup> getYearGroups() {
            return yearGroups;
        }

        public void setYearGroups(List<YearGroup> yearGroups) {
            this.yearGroups = yearGroups;
        }
    }

    public static class YearGroup {

        int yearGroupNumber;
        List<CourseGroup> courseGroups;

        public YearGroup(int yearGroupNumber, List<CourseGroup> courseGroups) {
            this.yearGroupNumber = yearGroupNumber;
            this.courseGroups = courseGroups;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("YearGroup{");
            sb.append("yearGroupNumber=").append(yearGroupNumber);
            sb.append(", courseGroups=").append(courseGroups);
            sb.append('}');
            return sb.toString();
        }

        public int getYearGroupNumber() {
            return yearGroupNumber;
        }

        public void setYearGroupNumber(int yearGroupNumber) {
            this.yearGroupNumber = yearGroupNumber;
        }

        public List<CourseGroup> getCourseGroups() {
            return courseGroups;
        }

        public void setCourseGroups(List<CourseGroup> courseGroups) {
            this.courseGroups = courseGroups;
        }
    }

    public static class CourseGroup {
        String courseGroupName;
        List<Day> days;

        public CourseGroup(String courseGroupName, List<Day> days) {
            this.courseGroupName = courseGroupName;
            this.days = days;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("CourseGroup{");
            sb.append("courseGroupName='").append(courseGroupName).append('\'');
            sb.append(", days=").append(days);
            sb.append('}');
            return sb.toString();
        }

        public List<Day> getDays() {
            return days;
        }

        public void setDays(List<Day> days) {
            this.days = days;
        }

        public String getCourseGroupName() {
            return courseGroupName;
        }

        public void setCourseGroupName(String courseGroupName) {
            this.courseGroupName = courseGroupName;
        }
    }

    public static class Day {
        String dayName;
        int dayNo;
        List<LecturePeriod> lecturePeriods;

        public Day(String dayName, int dayNo, List<LecturePeriod> lecturePeriods) {
            this.dayName = dayName;
            this.lecturePeriods = lecturePeriods;
            this.dayNo = dayNo;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Day{");
            sb.append("dayName='").append(dayName).append('\'');
            sb.append(", dayNo=").append(dayNo);
            sb.append(", lecturePeriods=").append(lecturePeriods);
            sb.append('}');
            return sb.toString();
        }

        public String getDayName() {
            return dayName;
        }

        public void setDayName(String dayName) {
            this.dayName = dayName;
        }

        public int getDayNo() {
            return dayNo;
        }

        public void setDayNo(int dayNo) {
            this.dayNo = dayNo;
        }

        public List<LecturePeriod> getLecturePeriods() {
            return lecturePeriods;
        }

        public void setLecturePeriods(List<LecturePeriod> lecturePeriods) {
            this.lecturePeriods = lecturePeriods;
        }
    }

    public static class LecturePeriod {
        String periodName;
        int periodNumber;
        boolean isPeriodAllocated;

        public LecturePeriod(String periodName, int periodNumber, boolean isPeriodAllocated) {
            this.periodName = periodName;
            this.periodNumber = periodNumber;
            this.isPeriodAllocated = isPeriodAllocated;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("LecturePeriod{");
            sb.append("periodName='").append(periodName).append('\'');
            sb.append(", periodNumber=").append(periodNumber);
            sb.append(", isPeriodAllocated=").append(isPeriodAllocated);
            sb.append('}');
            return sb.toString();
        }

        public String getPeriodName() {
            return periodName;
        }

        public void setPeriodName(String periodName) {
            this.periodName = periodName;
        }

        public int getPeriodNumber() {
            return periodNumber;
        }

        public void setPeriodNumber(int periodNumber) {
            this.periodNumber = periodNumber;
        }

        public boolean isPeriodAllocated() {
            return isPeriodAllocated;
        }

        public void setIsPeriodAllocated(boolean isPeriodAllocated) {
            this.isPeriodAllocated = isPeriodAllocated;
        }
    }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.Objects;
类HelloWorld{
公共静态void main(字符串[]args){
学校对象学校对象;
List讲师时段=新建ArrayList();
对于(int i=1;i{
字符串dayName=day.getDayName();
if(Objects.equals(dayName,“星期一”)){
day.get讲师周期().forEach(讲师周期->{
int-讲师PeriodNumber=讲师Period.getPeriodNumber();
if(Objects.equals(讲师周期编号,1)){
讲师周期设置周期(true);
}
});
}
});
});
});
System.out.println(“\n更改句点后的学校对象=“+schoolObject.toString()”);
final int[]numberOfAllocatedPeriodsExpected={0};
schoolObject.getYearGroups().forEach(yearGroup->{
yearGroup.getCourseGroups().forEach(courseGroup->{
courseGroup.getDays().forEach(天->{
day.get讲师周期().forEach(讲师周期->{
int-讲师PeriodNumber=讲师Period.getPeriodNumber();
if(Objects.equals(讲师周期编号,1)){
预期的分配周期数[0]+;
}
});
});
});
});
System.out.println(“\nTest result=“+Objects.equals(numberOfAllocatedPeriodsExpected[0],3));
}
公共静态类对象{
列出年份组;
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“学校对象{”);
sb.append(“yearGroups=”).append(yearGroups);
某人附加('}');
使某人返回字符串();
}
公共列表getYearGroups(){
返回组;
}
public void setYearGroups(列出yearGroups){
this.yearGroups=yearGroups;
}
}
公共静态类年组{
int yearGroupNumber;
列出课程组;
公共年组(国际年组编号,列出课程组){
this.yearGroupNumber=yearGroupNumber;
this.courseGroups=courseGroups;
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“年度组{”);
sb.append(“yearGroupNumber=”).append(yearGroupNumber);
sb.append(“,courseGroups=”).append(courseGroups);
某人附加('}');
使某人返回字符串();
}
public int getYearGroupNumber(){
返回yearGroupNumber;
}
public void setYearGroupNumber(int yearGroupNumber){
this.yearGroupNumber=yearGroupNumber;
}
公共列表getCourseGroups(){
返回课程组;
}
公共无效设置课程组(列出课程组){
this.courseGroups=courseGroups;
}
}
公共静态类课程组{
字符串courseGroupName;
列出日期;
公共课程组(字符串课程组名称,列表天数){
this.courseGroupName=courseGroupName;
这个.天=天;
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“课程组{”);
sb.append(“courseGroupName=”).append(courseGroupName).append(“\”);
某人追加(“,days=”)。追加(days);
某人附加('}');
使某人返回字符串();
}
公共列表getDays(){
返程天数;
}
公共作废设置天数(列表天数){
这个.天=天;
}
公共字符串getCourseGroupName(){
返回courseGroupName;
}
public void setCourseGroupName(字符串courseGroupName){
this.courseGroupName=courseGroupName;
}
}
公众静态上课日{
字符串dayName;
int dayNo;
列出演讲周期;
公共日(字符串dayName、int dayNo、列表讲师时段){
this.dayName=dayName;
this.讲师周期=讲师周期;
this.dayNo=dayNo;
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“第{”)天;
sb.append(“dayName=”).append(dayName).append(“\”);
某人追加(“,dayNo=”)。追加(dayNo);
某人追加(“,讲师期限=”)。追加(讲师期限);
某人附加('}');
使某人返回字符串();
}
公共字符串getDayName(){
返回dayName;
}
公共void setDayName(字符串dayName){
this.dayName=dayName;
}
public int getDayNo(){
返回天号;
}
公共无效setDayNo(int dayNo){
this.dayNo=dayNo;
}
公共列表get讲师周期(){
返回讲演周期;
}
公共无效设置讲师周期(列出讲师周期){
this.讲师周期=讲师周期;
}
}
公共静态类讲师周期{
字符串名称;
整数周期数;
布尔等周期;
公共讲师周期(字符串periodName、整数periodNumber、布尔值IsPeriodLocated){
this.periodName=periodName;
this.periodNumber=periodNumber;
this.isPeriodAllocated=isPeriodAllocated;
days.add(new Day(dayName, dayNo, lecturePeriods));
List<LecturePeriod> lecturePeriods = new ArrayList<>();
for (int j = 1; j <= 10; j++) {
    lecturePeriods.add(new LecturePeriod("Period " + j, j, false));
}
days.add(new Day(dayName, dayNo, lecturePeriods));