簡體   English   中英

如何在Java中將對象的ArrayList轉換為Integer列表

[英]How to convert a ArrayList of Objects into List of Integer in java

我使用此本地查詢來獲取數據。 select c.id,c.name from customer c,information i where i.status=1 and c.id=i.customerId並且我使用以下代碼將對象列表轉換為整數列表,如下所示:

public List<Integer> getAllIdsByGroupId(Integer groupId) throws Exception {
    List<Object[]> list = repository.getAllIdsByGroupId(groupId);
    List<Integer> ids = repository.mapIds(list);
    return ids;
}


public List<Object[]> getAllIdsByGroupId(Integer groupId) {  
    Query query = entityManager.createNativeQuery("select c.id,c.name from customer c,information i where i.status=1 and c.id=i.customerId and c.groupId=:groupId");
    query.setParameter("groupId", groupId);
    List<Object[]> list = query.getResultList();
    if (list == null || list.isEmpty()) {
        return null;
    }
    return list;
}


public List<Integer> mapIds(List<Object[]> list) {
    List<Integer> ids = new ArrayList<Integer>();
    if (list != null && !list.isEmpty()) {
        Integer id;
        for (Object[] object : list) {
            id = (object[0] != null ? (Integer) object[0] : null);
            ids.add(id);
        }
    }
    return ids;
}

該查詢檢索具有ID和名稱的列表。上面的代碼無例外地給出了輸出。但是我要求僅具有ID的列表。 當我按如下方式從查詢中刪除c.name時, select c.id from customer c,information i where i.status=1 and c.id=i.customerId上面的代碼失敗並產生異常

java.lang.Integer cannot be cast to [Ljava.lang.Object;

有幫助嗎? 提前致謝。

如果您使用JPA / Hibernate來獲取單列數據,則它隱式返回List<Integer> (基於該列的類型),因此無需將其轉換為Integer列表。

一般規則:

  • 如果選擇一個實體,則結果為該實體鍵入的項目的列表
  • 如果選擇原始類型,則結果是該原始包裝器鍵入的項目的列表
  • 如果選擇多個表達式(id,name),則結果為Object []包含相應的圖元/實體

問題出在類型轉換Change List<Object[]> list = query.getResultList();

List<Object> list = query.getResultList()

它是您的代碼嘗試轉換的對象列表,並將整數轉換為數組列表。

如果您只是嘗試獲取ID,則List<Integer> list = query.getResultList()也將足夠

試試這個可能不會在我的編輯器中嘗試,但是我想這個解決方案之一可以幫助您。

public List<Integer> mapIds(List<Object[]>  list) {
    List<Integer> ids = new ArrayList<Integer>();
    if(list != null && !list.isEmpty()) {
        int id;
        for(Object[] object : list) {
            id = (int) (object[0] != null ?  object[0] : null);
            ids.add(id);
     }
 }
 return ids;
}

雖然問題是缺乏大量的信息,對最可能的原因ClassCastException是你想投未中鍵入對象Integer輸入Integer 我不確定要傳遞給方法的列表中有什么,但是如果列表確實包含一些Integer類型的對象,那么您可以嘗試在將element object[0]轉換為Integer之前檢查一下,

public List<Integer> mapIds(List<Object[]> list) {
    List<Integer> ids = new ArrayList<Integer>();
    if (list != null && !list.isEmpty()) {
        Integer id;
        for (Object[] object : list) {
            id = ((object[0] != null && object[0] instanceof Integer) ? (Integer) object[0] : null);
            ids.add(id);
            }
        }
    }
    return ids;
}

但是,如果list的對象不包含任何Integer對象,則實現您正在執行的操作的唯一方法是通過某種方式檢索每個int值來為每個object[0]初始化一個Integer對象。 只有您知道如何執行此操作。

暫無
暫無

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

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