簡體   English   中英

將List對象強制轉換為List Long

[英]cast List object to List Long

我有一個問題,我無法將對象列表轉換為數字列表

public List<Long> sommeClassesRep(Choix choix) {

    Query q1xx = em.createQuery("SELECT SUM(h.nb1xx),  SUM(h.nb2xx),SUM(h.nb3xx),SUM(h.nb4xx),SUM(h.nb5xx) FROM HttpEntity h WHERE h.host = :host and h.date_http BETWEEN to_date(:startDate,'dd/mm/yyyy HH24:mi:ss') AND to_date(:endDate,'dd/mm/yyyy HH24:mi:ss')");

    q1xx.setParameter("host",choix.getHost() );
    q1xx.setParameter("startDate", convert.convertDateTime(choix.getStartdate()) );
    q1xx.setParameter("endDate", convert.convertDateTime(choix.getEndDate()));

    List<BigDecimal[]> listSomme = new ArrayList<BigDecimal[]>();
    listSomme =  (List<BigDecimal[]>) q1xx.getResultList();

    List<Long> listSomme =   (List<Long>) q1xx.getResultList();
    List<Long>  listResultat = new ArrayList<Long>();

    for (BigDecimal[]  obj: listSomme ){

        listResultat.add(( obj[0]).longValue());
        listResultat.add(( obj[1]).longValue());
        listResultat.add(( obj[2]).longValue());
        listResultat.add(( obj[3]).longValue());
        listResultat.add(( obj[4]).longValue());
    }

    return listResultat;

}

當我調試時,我在列表的第一個單元格中顯示查詢的結果,但是出現嚴重錯誤,無法將對象轉換為數字

幫助請謝謝

解決方案將是這樣的:

public List<Long> sommeClassesRep(Choix choix) {

    Query q1xx = em.createQuery("SELECT SUM(h.nb1xx),  SUM(h.nb2xx),SUM(h.nb3xx),SUM(h.nb4xx),SUM(h.nb5xx) FROM HttpEntity h WHERE h.host = :host and h.date_http BETWEEN to_date(:startDate,'dd/mm/yyyy HH24:mi:ss') AND to_date(:endDate,'dd/mm/yyyy HH24:mi:ss')");

    q1xx.setParameter("host",choix.getHost() );
    q1xx.setParameter("startDate", convert.convertDateTime(choix.getStartdate()) );
    q1xx.setParameter("endDate", convert.convertDateTime(choix.getEndDate()));

    Object[] listSomme = (Object[]) q1xx.getSingleResult();

    Long[] longArr = Arrays.copyOf(listSomme, listSomme.length, Long[].class);
    List<Long> listResultat = Arrays.asList(longArr);

    return listResultat;
}

說明:

在開始之前,我不知道每個值聲明什么類型:nb1xx,nb2xx,nb3xx,nb4xx,nb5xx。 因此,為了便於說明,我假設所有這些對象都聲明為Long

我從改變q1xx.getResultListq1xx.getSingleResult因為你的查詢將返回只有一行。 該行將是一個對象數組,因此我將listSomme定義為Object[]

當您要返回Long列表時,可以將Object數組的副本創建為Long數組(假設它們均為Long類型),然后將數組轉換為列表。

如果總和不是Long類型的(讓我們說BigDecimal ),則可以執行以下操作:

Object[] listSomme = (Object[]) q1xx.getSingleResult();

List<Long> listResultat = new ArrayList<Long>();
listResultat.add(((BigDecimal)listSomme[0]).longValue());
listResultat.add(((BigDecimal)listSomme[1]).longValue());
listResultat.add(((BigDecimal)listSomme[2]).longValue());
listResultat.add(((BigDecimal)listSomme[3]).longValue());
listResultat.add(((BigDecimal)listSomme[4]).longValue());

return listResultat;

我有一些擔憂:

List<BigDecimal[]> listSomme = new ArrayList<BigDecimal[]>();
listSomme =  (List<BigDecimal[]>) q1xx.getResultList();

List<Long> listSomme =   (List<Long>) q1xx.getResultList();

您有2個相同類型的變量,但有2個不同的泛型類型。 另外,為什么查詢返回List<BigDecimal>List<Long>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM