Как я должен использовать потоки в этой ситуации - PullRequest
0 голосов
/ 04 марта 2020

Я недавно использую stream в java и хотел бы знать, существует ли способ оптимизировать этот код. Я смущен, когда я должен использовать map или фильтр в этой ситуации

public Active get(List<Person> personList){
        Active a = null;
        for(Person person:personList){
            if(person.getActives() != null && !person.getActives().isEmpty()){
                for(Active active: person.getActives()){
                    if(active.getStatus().equals(SOME_VALUE)){
                        if (a == null || a.getDueDate().isAfter(active.getDueDate())) {
                            a = active;
                        }
                    }
                }
            }
        }
        return a;
}

1 Ответ

2 голосов
/ 04 марта 2020
  Active a = personList.stream()
         .filter(person -> person.getActives() != null && !person.getActives().isEmpty()
         .flatMap(person -> person.getActivities())
         .filter(activity -> active.getStatus().equals(SOME_VALUE))
         .reduce(null, (pos_a, activity) -> 
           (pos_a == null || a.getDueDate().isAfter(active.getDueDate()))? activity: pos_a)
    return a;

Это позволит получить всех людей, у которых есть действия, выполнить потоковую передачу всех действий (flatMap) и отфильтровать их по статусу, а затем уменьшить список, сохранив самый старый из них

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...