Java 如何查看该列表<;长期>;是否包含一个值?

Java 如何查看该列表<;长期>;是否包含一个值?,java,collections,Java,Collections,我有一个listlist list,它包含:[1607747212775]和Long id=7212775。我需要检查列表是否包含值为id的元素。怎么做?不幸的是list.contains(id)在我的例子中返回false 我是这样用的: @RequestMapping("/case/{id}") public String openCase(@PathVariable("id") Long id) { log.debug(caseDAO.findAllCasesId()); /

我有一个list
list list
,它包含:[1607747212775]和
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 findAllCasesId(){
String sql=“从案例中选择id”;
SQLQuery=getSession().createSQLQuery(sql);
返回query.list();
}

已解决

问题在于
caseDAO.findAllCasesId()
,它返回
对象的列表,而不是
长的列表。我纠正了这一点:

SQLQuery query=getSession().createSQLQuery(sql).addScalar(“id”,Hibernate.LONG)


非常感谢:

当自动装箱时,您需要确保在文字后加上一个L,即
长id=7212775L
,这样才能工作。

在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);
}
你做错的是

System.out.println(list.contains(7212775));
问题在于,您的列表包含很长的对象,并且您正在搜索文本。

list list=new ArrayList(Arrays.asList(160774L,7212775L));
List<Long> list = new ArrayList<Long>(Arrays.asList(160774L, 7212775L));
Long id = 7212775L;
System.out.println(list.contains(id)); // prints true
长id=7212775L; System.out.println(list.contains(id));//打印正确
嗯,我相信在您的情况下,列表应该返回true。 下面的代码返回true

List<Long> listOfLongs = new java.util.ArrayList<Long>();
    listOfLongs.add(160774L);
    listOfLongs.add(7212775L);
    return listOfLongs.contains(7212775L);
List listOfLongs=new java.util.ArrayList();
添加(160774L);
新增(7212775L);
返回longs.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));
List listOfLongs=new java.util.ArrayList();
LONGS.add列表(长值(160774L));
添加(长值(7212775L));
返回longs.contains列表(Long.valueOf(7212775L));

如果您能向我们展示这不起作用的代码,这会有所帮助。

我看不出问题所在。请发布您的代码?您是否绝对确定
caseDAO.findAllCasesId()
具有类型
List
?请注意,
List.contains(Object)
接受一个
对象
,因此很容易错误地测试不可能存在的东西。可能是
List
的特定实现不满足
contains()
的约定。尝试使用
检查
-循环和
等于()
,看看这是否是一个真正的错误。@Nayuki你说得对。我检查列表元素的
实例,它并不长!它是对象,因此问题是。非常感谢。好的,很高兴听到问题解决了。我认为在Stack Overflow上,你应该自己发布一个答案,然后接受它,呵呵,这样将来的读者可以从中受益
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));