假设我有一个如下所示的存储库:
import io.vavr.collection.HashMap;
import io.vavr.collection.List;
import io.vavr.collection.Map;
import io.vavr.control.Option;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Mono;
@Repository
class ImageSizeRepositoryInMemoryImpl implements ImageSizeRepository {
private volatile Map<String, ImageSize> imageSizes = HashMap.empty();
@Override
public Mono<ImageSize> save(Mono<ImageSize> imageSize) {
return imageSize.map(i -> {
imageSizes.put(i.getName(), i);
return i;
});
}
@Override
public Mono<Void> deleteByName(String name) {
this.imageSizes = imageSizes.remove(name);
return Mono.empty();
}
@Override
public Option<ImageSize> findOneByName(String name) {
return imageSizes.filter(t -> t._1.equals(name))
.map(t -> t._2)
.headOption();
}
@Override
public List<ImageSize> findAll() {
return imageSizes.values().toList();
}
}
正如我们所看到的那样,存在将imageSize参数作为Mono的save方法... 所以如果想要被动,在这种方法中我应该避免任何阻塞操作...... 所以我的问题是: map运算符是否适合写入(imageSizes.put(i.getName(),i))?
答案 0 :(得分:2)
Map
应免费副作用。将其存储在哈希映射中的副作用应该在doXXX
方法中完成 - 在您的情况下doOnNext