如何检查List <Long>是否包含值?

mar*_*osh 14 java collections

我有列表List<Long> list,其中包含:[160774,7212775]和Long id = 7212775.我需要检查列表是否包含值为的元素id.怎么做?不幸的是在我的情况下list.contains(id)返回false

我正是这样使用它:

@RequestMapping("/case/{id}")
public String openCase(@PathVariable("id") Long id) {

    log.debug(caseDAO.findAllCasesId());    // [160774, 7212775]
    log.debug(id); // 7212775

    if(caseDAO.findAllCasesId().contains(id)) {
        return "case";
    } else {
        return "404";
    }
}
Run Code Online (Sandbox Code Playgroud)

一块DAO(Hibernate,但原生sql在这里):

public List<Long> findAllCasesId() {
    String sql = "select id from cases";
    SQLQuery query = getSession().createSQLQuery(sql);
    return query.list();
}
Run Code Online (Sandbox Code Playgroud)

解决了

问题caseDAO.findAllCasesId()在于,返回列表Object,而不是列表Long.我纠正了这个:

SQLQuery query = getSession().createSQLQuery(sql).addScalar("id", Hibernate.LONG);

非常感谢:Nayuki Minase

San*_*rma 8

自动装箱时,您需要确保使用L对文字进行后缀,Long id = 7212775L即可使其正常工作.


Dhr*_*ola 5

在eclipse helios上运行以下代码:

public static void main(String[] args) {
    List<Long> list = new ArrayList<Long>();
    list.add(160774L);
    list.add(7212775L);
    System.out.println(list.contains(7212775L);
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
Run Code Online (Sandbox Code Playgroud)

你做错了什么

System.out.println(list.contains(7212775));
Run Code Online (Sandbox Code Playgroud)

问题是您的列表采用Long对象,并且您正在搜索文字.