2017-04-06 73 views
-1

我成功获取两个日期之间的月份列表,现在我想添加此列表到对象的另一份名单,我用addAll但我有此错误: The method addAll(Collection<? extends Object[]>) in the type List<Object[]> is not applicable for the arguments (List<String>)类型列表<Object[]>中的方法addAll(Collection <?extends Object []>)不适用于参数(列表<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); 
} 
+3

一个字符串不是一个对象数组。你究竟在努力实现什么,以及从String到Object []的转换如何工作? –

回答

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); 
} 
+0

谢谢你,我解决了我的日子 –

+0

我在'results'和'dateObj'列表中重复了一个月,我应该从'dateObj'中移除重复的元素,我该怎么做? –

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()); 

结果列表预计对象作为其元素的数组。字符串不是一个对象数组,它只是一个对象。第一种方法指定结果列表期望将对象作为其元素。第二种方法确保您将一个对象数组传递给结果。您的选择,使用您需要的任何套件。

0

result变量的类型“对象数组列表”。

您的dateObj变量的类型为“字符串列表”。

在Java中,Listarray[])是完全不同的构造,它们彼此不兼容。这正是你引用的错误信息所说的。

解决您的问题的一种方法是将您的dateObj列表转换为数组,然后将其添加到resultsee this StackOverflow Q&A)。


不过请注意,这可能不足以为你的代码工作,根据由query.getResultList()返回的实际对象。它可能是不可修改的,在这种情况下它会抛出一个UnsupportedOperationException

相关问题