Ответ 1
При автобоксинге вам нужно убедиться, что вы постфиксный литерал с L i.e. Long id = 7212775L
для этого.
У меня есть список 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);
Большое спасибо: Наюки Минасе
При автобоксинге вам нужно убедиться, что вы постфиксный литерал с L i.e. Long id = 7212775L
для этого.
Запуск кода, приведенного ниже, на гелионах eclipse:
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));
Проблема в том, что ваш список принимает длинные объекты, и вы ищете литерал.
List<Long> list = new ArrayList<Long>(Arrays.asList(160774L, 7212775L));
Long id = 7212775L;
System.out.println(list.contains(id)); // prints true
Хм, я считаю, что список списка должен возвращать 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));
Если вы можете показать нам код, где это не работает, это поможет.