Хэш-карта с потоком в реактивном программировании

#java #spring #spring-boot #redis #spring-webflux

#java #spring #весенняя загрузка #redis #spring-webflux

Вопрос:

Я должен преобразовать следующий код в неблокирующий (асинхронный) процесс.

Класс EmpController

 @RestController
@RequestMapping("/emp")
public class EmpController {

 private EmployeeRepository empRepo;

@Autowired
public EmpController(EmployeeRepository empRepo)
{
    this.empRepo=empRepo;
}

   @PostMapping("/save/all")
    @Consumes({MediaType.APPLICATION_JSON})
    public void saveEmpAll(@RequestBody List<Employee> emps)
    {
        empRepo.saveEmpAll(emps);
    }
}
  

Класс EmployeeRepository

 @Repository
public class EmployeeRepository implements EmployeeDAO {

 @Override
    public void saveEmpAll(List<Employee> emps) {

        Map<Long,Employee> employees=new HashMap<>();

        emps.forEach(emp->{
            emp.setDate(new Date());
            employees.put(emp.getId(),emp);
        });
        hashOperations.putAll("EMP",employees);
    }

}
  

Используйте реактивное программирование с Spring Webflux

контроллер

 @PostMapping("/save/all")
    @Consumes({MediaType.APPLICATION_JSON})
    public void saveEmpAll(@RequestBody Flux<Employee> emps)
    {
        emps.collectMap(e->{
           e.setDate(new Date());
           // todo.............( can I do like this? is it the right way?)
        });
    }
  

ropository

   @Override
    public void saveEmpAll(Map<Long,Employee> employees) {
        hashOperations.putAll("EMP",employees);
    }
  

есть ли какой-либо другой способ создать HashMap и поместить в него значения асинхронным способом с помощью Flux?

Комментарии:

1. Map<Long, Employee> employees = employeeList.stream().collect(Collectors.toMap(employee -> employee.getId(), employee -> employee)); Вы также можете попробовать подобное.