1
我有:今天的日期对象。在ArrayList中存储Java日历会导致意外的行为
我需要什么:存放一周包含的日期在一个ArrayList。
有什么我想:
public static void main(String[] args) {
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(today);
List<Calendar> daysOfWeek = new ArrayList<>();
IntStream
.iterate(2, n -> n+1)
.limit(7)
.forEach(n ->
{
if(n != 8){
cal.set(Calendar.DAY_OF_WEEK, n);
}else{
cal.set(Calendar.DAY_OF_WEEK, 1);
}
System.out.println("CAL_INSIDE: " + cal.getTime());
daysOfWeek.add(cal);
});
System.out.println("");
daysOfWeek.stream().forEach(cal -> System.out.println("CAL_OUTSIDE: " + cal.getTime()));
}
内的foreach语句中我得到正是我想要的。但ArrayList似乎只包含最后一个日期。 输出:
CAL_INSIDE: Mon Aug 03 14:35:37 CEST 2015
CAL_INSIDE: Tue Aug 04 14:35:37 CEST 2015
CAL_INSIDE: Wed Aug 05 14:35:37 CEST 2015
CAL_INSIDE: Thu Aug 06 14:35:37 CEST 2015
CAL_INSIDE: Fri Aug 07 14:35:37 CEST 2015
CAL_INSIDE: Sat Aug 08 14:35:37 CEST 2015
CAL_INSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:35:37 CEST 2015
基本上,我得到了我想要什么,但...
问:为什么只有星期天存储在ArrayList中?我错过了什么?
CAL_INSIDE: Mon Aug 03 14:51:31 CEST 2015
CAL_INSIDE: Tue Aug 04 14:51:31 CEST 2015
CAL_INSIDE: Wed Aug 05 14:51:31 CEST 2015
CAL_INSIDE: Thu Aug 06 14:51:31 CEST 2015
CAL_INSIDE: Fri Aug 07 14:51:31 CEST 2015
CAL_INSIDE: Sat Aug 08 14:51:31 CEST 2015
CAL_INSIDE: Sun Aug 09 14:51:31 CEST 2015
CAL_OUTSIDE: Mon Aug 03 14:51:31 CEST 2015
CAL_OUTSIDE: Tue Aug 04 14:51:31 CEST 2015
CAL_OUTSIDE: Wed Aug 05 14:51:31 CEST 2015
CAL_OUTSIDE: Thu Aug 06 14:51:31 CEST 2015
CAL_OUTSIDE: Fri Aug 07 14:51:31 CEST 2015
CAL_OUTSIDE: Sat Aug 08 14:51:31 CEST 2015
CAL_OUTSIDE: Sun Aug 09 14:51:31 CEST 2015
由于日历不是不可变的附加信息,无法重复吗? – SklogW
如果它是不可变的,那么您将无法像您那样做(您将无法更改现有对象中的字段),因此不会出现这种情况。所以它肯定是我提到的同样的问题。 – RealSkeptic
你是对的。感谢您的输入 – SklogW