方法addAll(Collection <! - ?extends Object [] - >)在类型List <object []>中不适用于参数(List <string>)

时间:2017-04-06 08:47:25

标签: java collections

我成功获得了两个日期之间的月份列表,现在我想将此列表添加到另一个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);
 }

3 个答案:

答案 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中,Listarray[])是完全不同的构造,彼此不兼容。这正是您引用的错误消息。

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

但请注意,根据query.getResultList()返回的实际对象,您的代码可能不够用。它可能是不可修改的,在这种情况下它将抛出UnsupportedOperationException