Как я могу найти объект Carnet
в ArrayList<Carnet>
, зная его свойство codeIsin
.
List<Carnet> listCarnet=carnetEJB.findAll();
public class Carnet {
private String codeTitre;
private String nomTitre;
private String codeIsin;
}
Как я могу найти объект Carnet
в ArrayList<Carnet>
, зная его свойство codeIsin
.
List<Carnet> listCarnet=carnetEJB.findAll();
public class Carnet {
private String codeTitre;
private String nomTitre;
private String codeIsin;
}
Вы не можете без итерации.
Вариант 1
Carnet findCarnet(String codeIsIn) {
for(Carnet carnet : listCarnet) {
if(carnet.getCodeIsIn().equals(codeIsIn)) {
return carnet;
}
}
return null;
}
Вариант 2
Отменить метод equals()
Carnet
.
Вариант 3
Сохраняя List
как Map
, используя codeIsIn
в качестве ключа:
HashMap<String, Carnet> carnets = new HashMap<>();
// setting map
Carnet carnet = carnets.get(codeIsIn);
Используя Java 8, мы можем сделать это легко.
Carnet getCarnet(String codeIsin) {
Predicate<Carnet> predicate = c-> c.getCodeIsin.equals(codeIsin);
Carnet obj = list.stream().filter(predicate).findFirst().get();
return obj;
}
Переопределить методы hashcode и equals
Для поиска объектов, которые имеют значимое значение, вам необходимо переопределить методы equals
и hashcode
для класса. Здесь вы можете найти хороший учебник.
http://www.thejavageek.com/2013/06/28/significance-of-equals-and-hashcode/
Вот решение, использующее Guava
private User findUserByName(List<User> userList, final String name) {
Optional<User> userOptional =
FluentIterable.from(userList).firstMatch(new Predicate<User>() {
@Override
public boolean apply(@Nullable User input) {
return input.getName().equals(name);
}
});
return userOptional.isPresent() ? userOptional.get() : null; // return user if found otherwise return null if user name don't exist in user list
}