Поток списка Java anyMatch, возвращающий неверный результат

1

У меня есть проект "Проект" класса JPA, в котором есть список 'Employee' а getEmployeeList() возвращает список Employees.

public  class Project implements Serializable {

    @ManyToMany(targetEntity=Employee.class)
    private List<Employee> employeeList;

    public List<Employee> getEmployeeList() {
        return this.employeeList;
    }
}

public  class Employee implements Serializable {
    @Basic
    private EmployeeType type;

    public EmployeeType getType() {
        return this.type;
    }
}

public enum EmployeeType implements Serializable{
  EDITOR,
  AUDITOR,
  ADMIN,
  INACTIVE
}

У меня есть Сотрудник с типом "Аудитор", и когда я запускаю следующие

for(Employee e: p.getEmployeeList()){
     if(e.getType()==EmployeeType.AUDITOR)
         found=true;
 }

он возвращает true, который должен, но когда я запускаю

(p.getEmployeeList()).stream().anyMatch((e) -> (e.getType()==EmployeeType.AUDITOR))

он возвращает false

Что я делаю не так?

  • 0
    Он сравнивает перечисляемые переменные, так разве это не должно так работать? Код кажется мне нормальным, даже если в нем есть ненужные скобки. p.getEmployeeList().stream().anyMatch(e -> e.getType() == EmployeeType.AUDITOR) тоже p.getEmployeeList().stream().anyMatch(e -> e.getType() == EmployeeType.AUDITOR) .
  • 0
    да, ты прав. Я собираюсь удалить комментарий.
Показать ещё 5 комментариев
Теги:
arraylist
java-8
jpa
java-stream

2 ответа

0
Лучший ответ

Решение. Измените возвращаемый тип на arraylist

public ArrayList<Employee> getEmployeeList() {
    return new ArrayList<>(this.employeeList);
}
0

Обновите версию EclipseLink, эта ошибка уже исправлена!

Ошибка: https://bugs.eclipse.org/bugs/show_bug.cgi?id=433075

Обновление до версии 2.6.0 или новее: http://mvnrepository.com/artifact/org.eclipse.persistence/eclipselink/2.6.0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню