[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-chem-otlichayutsya-mono-i-flux-v-project-reactor":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},995,"chem-otlichayutsya-mono-i-flux-v-project-reactor",31,"reactive","Reactive","⚡","Чем отличаются Mono и Flux в Project Reactor?","Mono — реактивный поток, эмитирующий 0 или 1 элемент. Flux — реактивный поток, эмитирующий от 0 до N элементов. Оба реализуют интерфейс Publisher и являются ленивыми — ничего не происходит до подписки.\n\n```java\n\u002F\u002F Flux: 0..N элементов\nFlux\u003CString> flux = Flux.just(\"Spring\", \"Reactor\", \"WebFlux\");\nFlux\u003CInteger> range = Flux.range(1, 100);\nFlux\u003CLong> interval = Flux.interval(Duration.ofSeconds(1)); \u002F\u002F бесконечный поток\n\n\u002F\u002F Mono: 0..1 элемент\nMono\u003CString> mono = Mono.just(\"Hello\");\nMono\u003CUser> user = Mono.fromCallable(() -> userRepository.findById(1L));\nMono\u003CVoid> empty = Mono.empty(); \u002F\u002F сигнал без данных (аналог void)\n```\n\n### Ключевые различия\n\n| Критерий | Mono | Flux |\n|----------|------|------|\n| Количество элементов | 0 или 1 | 0..N |\n| Аналог в блокирующем мире | Optional, CompletableFuture | List, Stream |\n| Типичное применение | Запрос к БД по ID, HTTP-запрос | Список сущностей, поток событий |\n| Backpressure | Не актуально (максимум 1 элемент) | Критически важно |\n\n### Конвертация между Mono и Flux\n\n```java\n\u002F\u002F Flux -> Mono\nMono\u003CString> first = Flux.just(\"A\", \"B\", \"C\").next();           \u002F\u002F первый элемент\nMono\u003CList\u003CString>> all = Flux.just(\"A\", \"B\", \"C\").collectList(); \u002F\u002F все в список\nMono\u003CLong> count = Flux.just(\"A\", \"B\", \"C\").count();             \u002F\u002F количество\n\n\u002F\u002F Mono -> Flux\nFlux\u003CString> flux = Mono.just(\"A\").flux();                       \u002F\u002F Mono как Flux из 1 элемента\nFlux\u003CString> repeated = Mono.just(\"A\").repeat(3);                \u002F\u002F повторить Mono\n```\n\n\u003Cdetails>\u003Csummary>Типичные паттерны использования в контроллере\u003C\u002Fsummary>\n\n```java\n@RestController\npublic class UserController {\n\n    @GetMapping(\"\u002Fusers\u002F{id}\")\n    public Mono\u003CUser> getUser(@PathVariable Long id) {\n        return userRepository.findById(id); \u002F\u002F Mono — один пользователь\n    }\n\n    @GetMapping(\"\u002Fusers\")\n    public Flux\u003CUser> getAllUsers() {\n        return userRepository.findAll(); \u002F\u002F Flux — список пользователей\n    }\n\n    @PostMapping(\"\u002Fusers\")\n    public Mono\u003CVoid> createUser(@RequestBody Mono\u003CUser> user) {\n        return user.flatMap(userRepository::save).then(); \u002F\u002F Mono\u003CVoid> — результат без тела\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Частые ошибки\n\n- Использовать Flux там, где достаточно Mono — если результат всегда один объект (findById), используйте Mono\n- Вызывать `.block()` в реактивном контексте — может привести к deadlock\n- Игнорировать возвращённый Mono\u002FFlux — без подписки операция не выполнится\n- Путать `map` и `flatMap` — map для синхронных преобразований, flatMap когда трансформация возвращает Mono\u002FFlux\n\n### Как используется в 2026\n\n- Mono и Flux — основа реактивного стека Spring (WebFlux, Spring Data Reactive, Spring Security Reactive)\n- С Virtual Threads часть сценариев заменяется обычным блокирующим кодом\n- Mono\u002FFlux незаменимы для streaming: SSE, WebSocket, R2DBC\n- Тренд: использование Mono\u002FFlux только там, где действительно нужна реактивность\n\n> **На собеседовании:** минимум — назвать отличие (0..1 vs 0..N) и привести примеры использования каждого. Частая ошибка — не упомянуть ленивость (lazy): Mono\u002FFlux без subscribe ничего не делают, а также забыть про Mono\u003CVoid> как реактивный аналог void.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Чем отличаются Mono и Flux в Project Reactor? — Gymterview","Mono — реактивный поток, эмитирующий 0 или 1 элемент. Flux — реактивный поток, эмитирующий от 0 до N элементов. Оба реализуют интерфейс Publisher и являются лен","Mono — реактивный поток, эмитирующий 0 или 1 элемент. Flux — реактивный поток, эмитирующий от 0 до N элементов. Оба реал",[7,13],"Mono — реактивный поток, эмитирующий 0 или 1 элемент. Flux — реактивный поток, эмитирующий от 0 до N элементов. Оба реализуют интерфейс Publisher и являются ленивыми — ничего не происходит до подписки.",true]