我成功地获得了两个日期之间的月份列表,现在我想将此列表添加到另一个对象列表中,我使用了addAll
,但我遇到了这个错误: The method addAll(Collection<? extends Object[]>) in the type List<Object[]> is not applicable for the arguments (List<String>)
这是我的尝试:
public void nbreRep(ActionEvent e){
List<Object[]> results;
List<String>dateObj=new ArrayList<String>() ;
Date date_de;
Date date_a;
Calendar beginCalendar = Calendar.getInstance();
Calendar finishCalendar = Calendar.getInstance();
beginCalendar.setTime(date_de);
finishCalendar.setTime(date_a);
while (beginCalendar.before(finishCalendar)) {
Date datediff = beginCalendar.getTime();
beginCalendar.add(Calendar.MONTH, 1);
fC = Calendar.getInstance();
Calendar fCa = Calendar.getInstance();
fC.setTime(datediff);
fCa.setTime(datediff);
int year = fCa.get(Calendar.YEAR);
String d=fC.getDisplayName(fC.MONTH, fC.LONG, Locale.FRANCE )+" "+year;
dateObj.add(d);
}
Query query=entityManager.createQuery("select r.dateheurerep,count(r) as nbrr "+" from Reparation r where r.dateheurerep >= :date_de and r.dateheurerep <= :date_a GROUP BY YEAR(r.dateheurerep),MONTH(r.dateheurerep)");
query.setParameter("date_de", date_de);
query.setParameter("date_a", date_a);
results = query.getResultList( );
results.addAll(dateObj);
}
添加到 dateObj 的对象应该是一个日期和一个计数List<Object[]>dateObj=new ArrayList<Object[]>() ;
public void nbreRep(ActionEvent e){
List<Object[]> results;
List<Object[]>dateObj=new ArrayList<Object[]>() ;
Date date_de;
Date date_a;
Calendar beginCalendar = Calendar.getInstance();
Calendar finishCalendar = Calendar.getInstance();
beginCalendar.setTime(date_de);
finishCalendar.setTime(date_a);
while (beginCalendar.before(finishCalendar)) {
Date datediff = beginCalendar.getTime();
beginCalendar.add(Calendar.MONTH, 1);
fC = Calendar.getInstance();
Calendar fCa = Calendar.getInstance();
fC.setTime(datediff);
fCa.setTime(datediff);
int year = fCa.get(Calendar.YEAR);
String d=fC.getDisplayName(fC.MONTH, fC.LONG, Locale.FRANCE )+" "+year;
Object[] obj = new Object[2];
obj[0] = d;
obj[1] = 1;
dateObj.add(obj);
}
Query query=entityManager.createQuery("select r.dateheurerep,count(r) as nbrr "+" from Reparation r where r.dateheurerep >= :date_de and r.dateheurerep <= :date_a GROUP BY YEAR(r.dateheurerep),MONTH(r.dateheurerep)");
query.setParameter("date_de", date_de);
query.setParameter("date_a", date_a);
results = query.getResultList( );
results.addAll(dateObj);
}
更改
List<Object[]> results;
to
List<Object> results;
或更改
List<String> dateObj = new ArrayList<String>();
to
List<Character[]> dateObj = new ArrayList<>();
and then to add elements to dateObj, use
dateObj.add(d.toCharArray());
结果列表需要对象数组作为其元素。字符串不是对象的数组,它只是一个对象。第一种方法指定结果列表需要对象作为其元素。第二种方法可确保将对象数组传递给结果。您的选择,使用您需要的任何套件。
您的result
变量的类型为"对象数组列表"。
您的dateObj
变量的类型为"字符串列表"。
在Java中,List
和array
([]
(是完全不同的结构,彼此不兼容。这正是您引用的错误消息所说的。
解决问题的一种方法是在将dateObj
列表添加到result
之前将其转换为数组(请参阅此StackOverflow问答(。
但请注意,代码可能不足以工作,具体取决于 query.getResultList()
返回的实际对象。它可能是不可修改的,在这种情况下,它将抛出一个UnsupportedOperationException
。