Java 无法将值赋给最终变量';每周总日分钟';

Java 无法将值赋给最终变量';每周总日分钟';,java,arrays,Java,Arrays,我有加班实体的列表,我需要过滤它们,然后我需要得到每个实体的DailReports数组并计算WeekTotalDailyMinutes变量 final long weekTotalDaylyMinutes = 0; List<Overtime> all; all = this.shiftRepository .findAllOvertimesByYearAndMonth(year, month)

我有加班实体的列表,我需要过滤它们,然后我需要得到每个实体的DailReports数组并计算WeekTotalDailyMinutes变量

final long weekTotalDaylyMinutes = 0;

List<Overtime> all;
            all = this.shiftRepository
                    .findAllOvertimesByYearAndMonth(year, month)
                    .stream()
                    .filter(o -> this.getOvertimeWeekOfYear(o) == currentOvertimeWeekOfYear
                            && o.getDeleted() == false
                            && !Objects.equals(o.getId(), genericOvertimeDTO.getId()))
                    .peek(overtime->this.getDialyOvertimeReports(overtime, year, month)
                            .stream()
                            .peek(a-> weekTotalDaylyMinutes+=a.getDayMinutes())
                    )
final long week totaldaylyments=0;
列出所有;
全部=此。移位移位移位
.FindalLoverTimesByYear和month(年,月)
.stream()
.filter(o->this.getOvertimeWeekOfYear(o)=currentOvertimeWeekOfYear
&&o.getDeleted()==false
&&!Objects.equals(o.getId(),genericOvertimeDTO.getId())
.peek(加班->此.getDialyOvertimerReports(加班、年、月)
.stream()
.peek(a->weekTotalDaylyMinutes+=a.getDayMinutes())
)
但我得到了一个错误:
无法为最终变量'weekTotalDaylyMinutes'赋值

如何解决这个问题?我需要得到这个变量中所有a.getDayMinutes超时的总和。提前谢谢

您可以使用带有一个元素的数组来允许在lambda中进行修改

final long[] weekTotalDaylyMinutes = {0};

List<Overtime> all;
            all = this.shiftRepository
                    .findAllOvertimesByYearAndMonth(year, month)
                    .stream()
                    .filter(o -> this.getOvertimeWeekOfYear(o) == currentOvertimeWeekOfYear
                            && o.getDeleted() == false
                            && !Objects.equals(o.getId(), genericOvertimeDTO.getId()))
                    .peek(overtime->this.getDialyOvertimeReports(overtime, year, month)
                            .stream()
                            .peek(a-> weekTotalDaylyMinutes[0] +=a.getDayMinutes())
                    );
System.out.println(weekTotalDaylyMinutes[0]);
final long[]weektotaldaylyments={0};
列出所有;
全部=此。移位移位移位
.FindalLoverTimesByYear和month(年,月)
.stream()
.filter(o->this.getOvertimeWeekOfYear(o)=currentOvertimeWeekOfYear
&&o.getDeleted()==false
&&!Objects.equals(o.getId(),genericOvertimeDTO.getId())
.peek(加班->此.getDialyOvertimerReports(加班、年、月)
.stream()
.peek(a->weekTotalDaylyMinutes[0]+=a.getDayMinutes())
);
System.out.println(周总日分[0]);

无法修改最终变量。此外,由于您使用的是lambda函数,因此该变量实际上应该是最终变量

所以你必须把计数放在某个物体内


创建一个具有一个值的类,并将weekTotalDaylyMinutes保持在该值内,

最终值是一个您不希望在短时间内更改的值,如。
因此,如果您真的想使用weekTotalDailyMinutes,我建议您删除'final'关键字,如果您正在寻找一个超越类实例的变量,最好使用'static',final

final
意味着您无法再更改它。它的值是
final
。除了实际问题之外,这是滥用流API。使用sum()。此外,weekTotalDaylyMinutes的名称也很糟糕。