如何在java中将对象的ArrayList转换为Integer的List

时间:2017-01-31 04:51:16

标签: java spring

我使用此本机查询来获取数据。 library(dplyr) DF %>% group_by(ID) %>% mutate(PREV_CASH = lag(cumsum(CASH)), PREV_CASH = replace(PREV_CASH, PREV_CASH==0, NA)) # ID YEAR CASH PREV_CASH # <fctr> <dbl> <dbl> <dbl> #1 A 1900 1 NA #2 A 1901 2 1 #3 A 1902 3 3 #4 A 1903 1 6 #5 B 1900 0 NA #6 B 1901 1 NA #7 B 1902 0 1 我使用下面的代码将对象列表转换为整数列表


select c.id,c.name from customer c,information i where i.status=1 and c.id=i.customerId

查询检索一个带有id和name的列表。上面的代码给出了输出,无异常。但我要求List只有id。当我从查询中删除c.name时,如下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; } ,上述代码失败并产生异常


select c.id from customer c,information i where i.status=1 and c.id=i.customerId

有什么帮助吗?提前谢谢。

4 个答案:

答案 0 :(得分:2)

如果您正在使用JPA / Hibernate获取单列数据,则它会隐式返回List<Integer>(基于该列的类型),因此无需将其转换为整数列表。

一般规则:

  • 如果您正在选择实体,则结果是该实体类型项的列表
  • 如果您正在选择原语,则结果是该原始包装类型项的列表
  • 如果您选择多个表达式(id,name),则结果为包含相应基元/实体的Object []

答案 1 :(得分:2)

问题在于类型转换 更改 List<Object[]> list = query.getResultList();

要 的 List<Object> list = query.getResultList()

它是您的代码尝试转换的对象列表,并将整数转换为数组列表。

如果您只是想获取ID,

List<Integer> list = query.getResultList()也就足够了

答案 2 :(得分:0)

试试这个可能不会在我的编辑器中尝试但是我可以帮助你解决这个问题。

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;
}

答案 3 :(得分:0)

虽然问题是缺少大量信息,但ClassCastException的最可能原因是您尝试将非Integer类型的对象投射到Integer类型。我不确定你传递给方法的列表中有什么,但如果列表确实包含一些Integer类型的对象,那么你可以尝试在转换元素{{{}}之前检查它。 1}}进入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个对象{1}}以某种方式检索每个中的Integer值。只有你知道如何做到这一点。