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

时间:2011-08-18 20:28:08

标签: 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";
    }
}

一块DAO(Hibernate,但是原生sql):

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

解决

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

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

非常感谢:Nayuki Minase

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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);
}

输出:

true

你做错了什么

System.out.println(list.contains(7212775));

问题是你的列表需要Long对象而你正在搜索文字。

答案 2 :(得分:3)

List<Long> list = new ArrayList<Long>(Arrays.asList(160774L, 7212775L));
Long id = 7212775L;
System.out.println(list.contains(id)); // prints true

答案 3 :(得分:0)

嗯,我相信列表列表应该在您的情况下返回true。 以下代码返回true。

List<Long> listOfLongs = new java.util.ArrayList<Long>();
    listOfLongs.add(160774L);
    listOfLongs.add(7212775L);
    return listOfLongs.contains(7212775L);

相同
List<Long> listOfLongs = new java.util.ArrayList<Long>();
    listOfLongs.add(Long.valueOf(160774L));
    listOfLongs.add(Long.valueOf(7212775L));
    return listOfLongs.contains(Long.valueOf(7212775L));

如果您可以向我们展示不起作用的代码,那将会有所帮助。