* @example group_by.cpp **/
| 6 | * @example group_by.cpp |
| 7 | **/ |
| 8 | int main() |
| 9 | { |
| 10 | //! [group_by] |
| 11 | rpp::source::just(1, 2, 3, 4, 5, 6, 7, 8) |
| 12 | | rpp::operators::group_by([](int v) { return v % 2 == 0; }) |
| 13 | | rpp::operators::subscribe([](auto grouped_observable) { |
| 14 | auto key = grouped_observable.get_key(); |
| 15 | std::cout << "new grouped observable " << key << std::endl; |
| 16 | grouped_observable.subscribe([key](int val) { |
| 17 | std::cout << "key [" << key << "] Val: " << val << std::endl; |
| 18 | }); |
| 19 | }); |
| 20 | // Output: new grouped observable 0 |
| 21 | // key [0] Val: 1 |
| 22 | // new grouped observable 1 |
| 23 | // key [1] Val: 2 |
| 24 | // key [0] Val: 3 |
| 25 | // key [1] Val: 4 |
| 26 | // key [0] Val: 5 |
| 27 | // key [1] Val: 6 |
| 28 | // key [0] Val: 7 |
| 29 | // key [1] Val: 8 |
| 30 | //! [group_by] |
| 31 | // |
| 32 | //! [group_by selector] |
| 33 | struct person |
| 34 | { |
| 35 | std::string name; |
| 36 | int age; |
| 37 | }; |
| 38 | rpp::source::just(person{"Kate", 18}, |
| 39 | person{"Alex", 25}, |
| 40 | person{"Nick", 18}, |
| 41 | person{"Jack", 25}, |
| 42 | person{"Tom", 30}, |
| 43 | person{"Vanda", 18}) |
| 44 | | rpp::operators::group_by([](const person& v) { return v.age; }, [](const person& v) { return v.name; }) |
| 45 | | rpp::operators::subscribe([](auto grouped_observable) { |
| 46 | grouped_observable.subscribe([age = grouped_observable.get_key()](const std::string& name) { |
| 47 | std::cout << "Age [" << age << "] Name: " << name << std::endl; |
| 48 | }); |
| 49 | }); |
| 50 | |
| 51 | // Output: Age [18] Name: Kate |
| 52 | // Age [25] Name: Alex |
| 53 | // Age [18] Name: Nick |
| 54 | // Age [25] Name: Jack |
| 55 | // Age [30] Name: Tom |
| 56 | // Age [18] Name: Vanda |
| 57 | //! [group_by selector] |
| 58 | return 0; |
| 59 | } |