Java 如何查看该列表<;长期>;是否包含一个值?
我有一个listJava 如何查看该列表<;长期>;是否包含一个值?,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
,它包含:[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));