2017-04-06 12 views
-1

2ヶ月の間に月のリストを持つことに成功しました。オブジェクトの別のリストに、私は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

さて、あなたのオブジェクトは、日付や回数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()); 

あなたの結果リストには、その要素としてオブジェクトの配列を期待しています。 Stringはオブジェクトの配列ではなく、単なるオブジェクトです。最初のメソッドは、結果リストがオブジェクトをその要素として期待していることを指定します。 2番目の方法では、オブジェクトの配列を結果に渡すことが保証されます。あなたの選択は、必要なスイートを使用してください。

0

あなたresult変数の型「オブジェクトの配列のリスト」を持っているのでなければなりませんdateObjに加えます。

dateObj変数には、 "List of Strings"タイプがあります。

Javaでは、Listおよびarray[])は、互いに互換性のない完全に異なる構成体です。これはまさにあなたが引用したエラーメッセージの内容です。

あなたの問題を解決する方法は、resultsee this StackOverflow Q&A)に追加する前に、dateObjリストを配列に変換することです。


注しかし、query.getResultList()によって返された実際のオブジェクトに応じて、あなたのコードが動作するためには十分ではないかもしれないこと。それは変更不可能な場合があり、その場合はUnsupportedOperationExceptionが投げられます。

関連する問題