Доступ к HashMap - PullRequest
       1

Доступ к HashMap

0 голосов
/ 27 июня 2018
Class DataAcess{
private Map<Integer, Person> persList;
  public DataAccess(Map persList){
     this.persList = persList; 
  } 
  public List<Person> getPersByDept(String dept){ 
   \\what is the efficient way to get data 
  }
}
Class Person { 
  Integer id;
  Dept dept; 
} 
Class Dept { 
  String id; 
}    

Какой самый эффективный способ получить доступ к хэш-карте в методе getPersByDept, чтобы получить список объектов-людей, имеющих определенный идентификатор отдела?

1 Ответ

0 голосов
/ 27 июня 2018

Если вы хотите просто искать без каких-либо дополнительных структур:

 public List<Person> getPersByDept(String dept) {
   return persList.values().stream()
             .filter(person-> Objects.nonNull(person.dept))
             .filter(person -> Objects.equals(person.dept.id, dept))
             .collect(Collectors.toList());
}

Но если вы хотите быть более эффективным, вам нужно подготовить карту:

class DataAcess {
    private Map<Integer, Person> persList;
    private Map<String, List<Person>> personsByDebt;
    public DataAcess(Map persList) {
        this.persList = persList;
        this.personsByDebt=this.persList.values().stream()
                .filter(person-> Objects.nonNull(person.dept))
                .collect(Collectors.groupingBy(person-> person.dept.id));
    }

    public List<Person> getPersByDept(String dept) {
        return personsByDebt.getOrDefault(dept, Collections.emptyList());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...