我有列表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
答案 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));
如果您可以向我们展示不起作用的代码,那将会有所帮助。