JavaRush /Java блог /Архив info.javarush /Перевод книги. Функицональное программирование в Java. Гл...
timurnav
21 уровень

Перевод книги. Функицональное программирование в Java. Глава 2. Используем Коллекции

Статья из группы Архив info.javarush
Буду рад помощи в поиске ошибок и улучшения качества перевода. Я перевожу для прокачки скилла английского языка, а если вы читаете и ищите ошибки перевода, то вы прокачиваетесь еще лучше, чем я. Автор книги пишет, что книга предполагает наличие большого опыта работы с Java, если честно, я сам не особо опытный, но материал книги понял. в книге касаются некоторой теории, которую сложно объяснить на пальцах, если в вики будет достойные статьи, то я буду приводить на них ссылки, но для лучшего понимания рекомендую расчехлять гугл самостоятельно. всем успехов. :) Для тех кому захочется подкорректировать мой перевод, а так же для тех кому он покажется слишком убогим, чтобы читать его на русском, оригинал книги можете скачать тут. Оглавление Глава 1 Hello, Лямбда выражения — в разработке Глава 2 Используем Коллекции — читаете в настоящий момент Глава 3 Строки, Компараторы и Фильтры — в разработке Глава 4 Разработка с лямбда выражениями — в разработке Глава 5 Работа с ресурсами — в разработке Глава 6 Ленимся — в разработке Глава 7 Оптимизируем ресурсы — в разработке Глава 8 Компоновка с лямбда выражениями — в разработке Глава 9 Собираем всё в одну кучу — в разработке
Глава 2 Используем Коллекции. Мы часто используем коллекции чисел, строк или объектов. Они встречаются настолько часто, что даже самое малозначительное упрощение взаимодействия с коллекциями может значительно уменьшить беспорядок в коде. В этой главе мы исследуем использование Лямбда-выражений для управления коллекциями. Мы используем их для итерации коллекций, преобразования их в новые экземпляры коллекций, измвлечения элементов из них и упрощения конкатенации их элементов. После этой главы, наш Java код обрабатывающий коллекции больше никогда не будет прежним - он станет кратким, выразительным, элегантным и более гибким чем был когда-либо.
Итерирование списка
Перебор элементов списка является основной операцией применяемой к коллекциям, но но после многих лет использования, он претерпел несколько значительных изменений. Мы начнем со старого знакомого примера - перечисление списка имен - и приведем его к элегантному стилю. Мы можем создать неизменяемую коллекцию в виде списка имен следующим образом: final List friends = Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott"); Ниже представлен привычный нам, но не самый лучший способ обращения и вывода в консоль каждого элемента. for(int i = 0; i < friends.size(); i++) { System.out.println(friends.get(i)); } Это очень простая функциональность, но даже она содержит много букав и даже в ней можно допустить ошибку, например использовать проверку i<= вместо i<. Такой стиль кода полезен только в том случае если нам необходимо оперировать конкретными элементами коллекции с определенными индексами, но даже в тогда можно применить функциональный стиль программирования, который не подвержен изменяемости, мы это будем обсуждать в ближайшее время. Java так же предлагает сконструировать более цивилизованные варианты цикла for. for(String name : friends) { System.out.println(name); } Под капотом у этой конструкции используется интерфейс Iterator и вызываются его методы hasNext() и next(). Обе эти конструкции являются внешними итераторами, которые смешивают то КАК мы делаем, с тем ЧТО мы хотим получить. Мы явно управляем итерацией с их помощью, указывая где начинать и где оканчивать, вторая версия делает то же самое, т.к. под капотом у нее находится методы интерфейса Iterator. С явным контролем положений break и continue так же можно управлять ходом итерации. Вторая конструкция проще первой. Её стиль лушче, если нам не требуется изменять коллекцию по отдельным индексам. Оба этих стиля, однако, императивные и мы можем обойтись без них в современном Java. Есть несколько аргументов использования функционального стиля программирования циклов:
  • Циклы последовательны и их довольно сложно распараллелить
  • Такие циклы не поддерживают полиморфизм, мы получаем именно то, что спрашиваем. Мы пробегаем по элементами коллекции, вместо вызова какого-нибудь метода (операция поддерживающая полиморфизм) у коллекции
  • На уровне разработки, код не поддерживает принцип "Говори, а не спрашивай". Мы
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ