循环获取值的问题

时间:2012-09-27 09:07:54

标签: java list arraylist

我在获取下面循环中的数据时遇到问题,即使大小不为零,我在sysout'数据中得到null'。那有什么问题?

List<Long> dd = domainItemMapper.getIsSearchable(34372);
    System.out.println("the test is-" + dd.size());
    for (int i = 0; i < dd.size(); i++) {
        Long isSearch = dd.get(i);
        System.out.println("data is"+dd.get(i));
        if (isSearch.equals(0)) {
            isSearchValue = false;
        } else
            isSearchValue = true;
    }

对数据库的调用是mybatis调用,如下所示 接口

List<Long> getIsSearchable(@Param("parentFieldId") long parentFieldId);

IMPL

<mapper namespace="com.ge.dbt.common.persistence.IFormValidatorMapper">

        <select id="getIsSearchable" statementType="CALLABLE"
        resultType="Long">
        select is_searchable from t_field where parent_field_id=#{parentFieldId}
    </select>

</mapper>

4 个答案:

答案 0 :(得分:0)

我猜您的整个代码可以转换为两行。

if(dd!= null && !dd.isEmpty())
 return dd.contains(0);//Contains Guard you in such cases because equals check
                       //happen on passed element ie *0*

java中Long的默认值为null。因此,在您的案例中,您需要额外检查null

答案 1 :(得分:0)

isSearch.equals支票纳入null支票

if(isSearch != null)
{
    if (isSearch.equals(0)) 
    {             
        isSearchValue = false;         
    } 
    else             
    {
       isSearchValue = true;
    }
}

但是,最好修改domainItemMapper.getIsSearchable(34372);方法的代码,以便它根本不会使用null填充列表。

答案 2 :(得分:0)

似乎您的列表包含null文字。并且List支持null作为值。

答案 3 :(得分:0)

根据您的评论

  

数据有null,0和1数据。我想只返回0和1的数据。

您需要像这样修复您的查询

 select is_searchable from t_field where parent_field_id=#{parentFieldId} and is_searchable is not NULL;