我的任务是使用Flux / Mono使UserService具有反应性。
我了解flux和mono的工作原理,但仅对存储库而不是对数组列表起作用。
UserServiceImpl:
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements UserService {
private List<User> users = new ArrayList<>();
@PostConstruct
public void postConstruct() {
this.users.add(User.builder()
.id(1L)
.username("username1")
.age(14)
.build());
}
@Override
public User findOne(Long userId) {
LOGGER.info("UserService: execute findOne(userId) method");
return this.users.stream()
.filter(user -> user.getId().equals(userId))
.findFirst()
.orElse(null);
}
@Override
public List<User> findAll() {
LOGGER.info("UserService: execute findAll() method");
return this.users;
}
@Override
public void add() {
LOGGER.info("UserService: execute add() method");
this.users.add(User.builder()
.id(3L)
.username("username3")
.age(34)
.build());
}
}
答案 0 :(得分:1)
您可以从列表创建助焊剂。例如:
Flux<User> userStream = Flux.fromIterable(users)
或者如果需要返回一个
Flux.just(user)
Mono.just(user)
在现有流中增加价值
userStream = Flux.concat(userStream, Flux.just(newUser));
有关更多详细信息: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html