Подтвердить что ты не робот

Как проверить, что List <Long> содержит значение?

У меня есть список 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);

Большое спасибо: Наюки Минасе

4b9b3361

Ответ 1

При автобоксинге вам нужно убедиться, что вы постфиксный литерал с L i.e. Long id = 7212775L для этого.

Ответ 2

Запуск кода, приведенного ниже, на гелионах 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));

Проблема в том, что ваш список принимает длинные объекты, и вы ищете литерал.

Ответ 3

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

Ответ 4

Хм, я считаю, что список списка должен возвращать 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));

Если вы можете показать нам код, где это не работает, это поможет.