我成功获得了两个日期之间的月份列表,现在我想将此列表添加到另一个Object列表中,我使用了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);
}
答案 0 :(得分:0)
更改
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());
您的结果列表需要对象数组作为其元素。 String不是一个对象数组,它只是一个对象。第一种方法指定结果列表期望对象作为其元素。第二种方法可确保将对象数组传递给结果。您的选择,使用您需要的任何套房。
答案 1 :(得分:0)
您添加到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);
}
答案 2 :(得分:0)
您的result
变量的类型为&#34;对象数组列表&#34;。
您的dateObj
变量的类型为&#34;字符串列表&#34;。
在Java中,List
和array
([]
)是完全不同的构造,彼此不兼容。这正是您引用的错误消息。
解决问题的一种方法是将dateObj
列表转换为数组,然后再将其添加到result
(see this StackOverflow Q&A)。
但请注意,根据query.getResultList()
返回的实际对象,您的代码可能不够用。它可能是不可修改的,在这种情况下它将抛出UnsupportedOperationException
。