Это просто нечто. Очень редко случается найти спикера, которого просто взахлеб слушаешь. Жалко, что Тагир не в мире веб-разработки. Очень бы хотел послушать от него про спринг, хибер, паттерны и лучшие практики во всем этом, как он рассказывает про Java Core.
@ansarozden5767 Жыл бұрын
Спасибо большое Тагиру и учебному центру за то, что вот так бескорыстно предоставляете доступ к своим лекциям!
@1236Destructor7 күн бұрын
1:04:10 В качестве бинарного оператора можно взять Math.min() и тогда решение будет выглядеть еще более изящно, с тремя метод-референсами toMap(Book::getCategory, Book::getPrice, Math::min)
@ЮрийШотин2 жыл бұрын
Очень познавательно. Чем больше смотрю про Stream API, тем больше нового узнаю. Полезно знать про реализацию в разных версиях Java.
@John_Smith_Java2 жыл бұрын
Коллекторы - восхитительны! Тагир - великолепен!
@PatBatTB Жыл бұрын
Спасибо за курс! Думаю было бы хорошим тоном ссылки из видео дублировать в описании. ))
@John_Smith_Java2 жыл бұрын
7:25 "в этом месте мы начинаем спускать в ад" - в голосину😂😂😂
@virus09362 жыл бұрын
Тоже проорал)
@oldjohn1503 Жыл бұрын
Спасибо, Тагир! Разжевал)
@John_Smith_Java2 жыл бұрын
Тагир крутой.
@quaddamage77652 жыл бұрын
Тагир лучший!
@ShadowKevil11 ай бұрын
В лекции почти не коснулись параллельных стримов. Почему не стоит использовать параллельные стримы по умолчанию?
@arvoglade87535 ай бұрын
Параллельные стримы не стоит использовать по умолчанию, из-за накладных расходов на распараллеливание до, слияние после и управление потоками и дополнительной памятью в процессе. Например на сотне элементов параллельные стримы могут работать в тысячи раз медленнее, чем обычные. Стоит распараллеливать, если объём данных ожидается большой, и, что важнее, если вы понимаете, что это узкое место, вы провели тесты, и выяснилось, что параллельные стримы работают лучше. Нет универсального и одновременно точного способа теоретически понять, когда распараллеливание показывает выгоду, поэтому лучше проверять
@АнтонВаськин-б1б Жыл бұрын
кто - нибудь решил упражнение с 54:25 ?
@anastasiya_pesto Жыл бұрын
Я пытаюсь сижу, пока не получилось. А ты решил?
@АнтонВаськин-б1б Жыл бұрын
@@anastasiya_pesto неа , просто , кажется , как будто и невозможно
@DenisReto Жыл бұрын
Без промежуточного итога не получилось решить, только если добавить промежуточный класс public record UserDepartment(User user, Department department) { }; То решение такое: private Map getUserChiefs(Company company) { Stream userDepartments = company.departments .flatMap(d -> d.users.map((u -> new UserDepartment(u, d)))); return userDepartments .collect(groupingBy(ud -> ud.user, mapping(ud -> ud.department.chief, toList()) )); }
@DenisReto Жыл бұрын
ну и такой тест прогнал для наглядности @Test public void test() { //map key - is user - worker //map - value list of chiefs User denis = new User("Denis"); User jack = new User("Jack"); User john = new User("John"); User bob = new User("Bob"); User ivan = new User("Ivan"); Department itDepartment = new Department("IT", john, Stream.of(denis, jack, bob)); Department accountingDepartment = new Department("Accounting", ivan, Stream.of(jack, bob)); Company megaIndustrials = new Company(Stream.of(itDepartment, accountingDepartment)); Map userChiefs = getUserChiefs(megaIndustrials); assertTrue(userChiefs.containsKey(jack)); assertEquals(2, userChiefs.get(jack).size()); assertEquals(2, userChiefs.get(bob).size()); assertTrue(userChiefs.get(jack).containsAll(List.of(john, ivan))); assertTrue(userChiefs.get(bob).containsAll(List.of(john, ivan))); assertEquals(1, userChiefs.get(denis).size()); assertTrue(userChiefs.get(denis).contains(john)); }
@dotherap Жыл бұрын
@@MaksimWojtk я вот так сделал через группировку: company.departments().stream() .flatMap(d -> d.users() .map(u -> new AbstractMap.SimpleEntry(u, d.chief()) {})) .collect(groupingBy(AbstractMap.SimpleEntry::getKey, mapping(AbstractMap.SimpleEntry::getValue, toList()))) Но идею с парой использовал вашу. Не знаю, возможно ли как-то проще.