2017-04-06 178 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

相關問題