Stream Filter
Метод Stream::filter позволяет отфильтровывать значения из набора данных.
Синтаксис:
#java #lesson #stream
Метод Stream::filter позволяет отфильтровывать значения из набора данных.
Синтаксис:
.filter(object -> condition)
Работает он предельно просто: он проходит по каждому элементу из массива и проверяет его с помощью лямбды object -> condition
. Если результат равен true, значение оставляем в массиве.#java #lesson #stream
Кортежи в Java
Часто бывает ситуация, когда надо вернуть из метода несколько объектов одного разного типа. На этот случай придуманы кортежи.
В Java кортежи реализованы интерфейсом Cortege<F, S> и имплементированы классом CortageChain. Чтобы хранить в нём данные, достаточно с помощью дженериков задать типы и присвоить им значения.
Важной особенностью кортежей является возможность выстраивать цепочки, например так:
Часто бывает ситуация, когда надо вернуть из метода несколько объектов одного разного типа. На этот случай придуманы кортежи.
В Java кортежи реализованы интерфейсом Cortege<F, S> и имплементированы классом CortageChain. Чтобы хранить в нём данные, достаточно с помощью дженериков задать типы и присвоить им значения.
Важной особенностью кортежей является возможность выстраивать цепочки, например так:
Cortege<Long, Cortege<String, Cortege<Float, Cortege.End>>>
#java #lesson #collectionsТеория дженериков в Java
Дженерики — это невероятно важная часть языка Java, которую вы используете повсеместно. Их суть в обобщении типов, тем самым делая классы и методы гибкими.
Использовать дженерики можно в классах и методы. Обозначаются они стрелочными скобками и именем типа <T> (примеры вы можете увидеть выше).
По сути дженерики это лишь синтаксический сахар, поскольку в скомпилированном коде они не отличимы от обычного преобразования типов.
#java #lesson #oop
Дженерики — это невероятно важная часть языка Java, которую вы используете повсеместно. Их суть в обобщении типов, тем самым делая классы и методы гибкими.
Использовать дженерики можно в классах и методы. Обозначаются они стрелочными скобками и именем типа <T> (примеры вы можете увидеть выше).
По сути дженерики это лишь синтаксический сахар, поскольку в скомпилированном коде они не отличимы от обычного преобразования типов.
#java #lesson #oop
Рефлексии в Java
Рефлексия — это механизм, который позволяет получить данные из структуры классов, методов и полей.
Сам же механизм рефлексии позволяет обрабатывать типы, отсутствующие при компиляции, но появившиеся во время выполнения программы.
Рефлексия и наличие логически целостной модели выдачи информации об ошибках дает возможность создавать корректный динамический код.
#java #lesson #theory
Рефлексия — это механизм, который позволяет получить данные из структуры классов, методов и полей.
Сам же механизм рефлексии позволяет обрабатывать типы, отсутствующие при компиляции, но появившиеся во время выполнения программы.
Рефлексия и наличие логически целостной модели выдачи информации об ошибках дает возможность создавать корректный динамический код.
#java #lesson #theory
Аннотации в Java
По сути своей аннотации — это метаданные объектов структуры класса и самого класса, который в дальнейшем обрабатывается.
Аннотации бывают встроенными, а также можно создать свои, но самые ключевые из них это Target и Retention.
Target принимает один или несколько типов, которым можно привязать дочернюю аннотацию. Получить их можно из ElementType.
Retention же обозначает на каком уровне будет находится и обрабатываться аннотация. Всего их три: RUNTIME, CLASS и SOURCE
#java #lesson #reflection
По сути своей аннотации — это метаданные объектов структуры класса и самого класса, который в дальнейшем обрабатывается.
Аннотации бывают встроенными, а также можно создать свои, но самые ключевые из них это Target и Retention.
Target принимает один или несколько типов, которым можно привязать дочернюю аннотацию. Получить их можно из ElementType.
Retention же обозначает на каком уровне будет находится и обрабатываться аннотация. Всего их три: RUNTIME, CLASS и SOURCE
#java #lesson #reflection
Немного про JVM
В отличии от JIT компиляторов таких языков как C/C++, код Java компилируется в свой байткод. По сути это ваш код, сжатый и упрощённый до простых операций.
Обрабатывать этот байткод будет JRE и виртуальная машина JVM — выделенная область для процессов Java со своей инфраструктурой.
Такой способ компиляции имеет много преимуществ, в частности — кроссплатформенность.
Спектр поддерживаемых устройств невероятно велик: от кнопочных телефоном и банкоматов до компьютеров и сервером NASA.
#java #theory
В отличии от JIT компиляторов таких языков как C/C++, код Java компилируется в свой байткод. По сути это ваш код, сжатый и упрощённый до простых операций.
Обрабатывать этот байткод будет JRE и виртуальная машина JVM — выделенная область для процессов Java со своей инфраструктурой.
Такой способ компиляции имеет много преимуществ, в частности — кроссплатформенность.
Спектр поддерживаемых устройств невероятно велик: от кнопочных телефоном и банкоматов до компьютеров и сервером NASA.
#java #theory
Бесконечности в Java
Часто алгоритмы, в частности перебор и сортировка массивов, требуют числа, которые могут быть меньше или больше абсолютно любого другого числа.
И такие числа есть — NEGATIVE_INFINITY и POSITIVE_INFINITY. Их имеют все классы, которые наследуются от Number.
Главной особенностью является то, что эти числа больше/меньше не только других чисел, но и себя.
#java #lesson #features
Часто алгоритмы, в частности перебор и сортировка массивов, требуют числа, которые могут быть меньше или больше абсолютно любого другого числа.
И такие числа есть — NEGATIVE_INFINITY и POSITIVE_INFINITY. Их имеют все классы, которые наследуются от Number.
Главной особенностью является то, что эти числа больше/меньше не только других чисел, но и себя.
#java #lesson #features
Перечисления в Java
Это набор именнованых констант. Таким образом мы можем заменить непонятные цифры (1, 2, 4) или буквы ("E", "W", "N", "S") и сделать код более стабильным.
Определяются они с помощью ключевого слова enum, после которого идёт имя, и, в фигурных, скобках перечиляются значения.
Перечесления в Java могут также хранить собственные переменные и методы. Для этого надо создать enum конструктор и добавить его вызов к значениям.
#java #lesson
Это набор именнованых констант. Таким образом мы можем заменить непонятные цифры (1, 2, 4) или буквы ("E", "W", "N", "S") и сделать код более стабильным.
Определяются они с помощью ключевого слова enum, после которого идёт имя, и, в фигурных, скобках перечиляются значения.
Перечесления в Java могут также хранить собственные переменные и методы. Для этого надо создать enum конструктор и добавить его вызов к значениям.
#java #lesson
Работаем с временем
Для работы с датами и временем, у нас, в пакете
При создании экземпляра с пустым конструктором вы получаете время и дату, которая сейчас. Если же вам надо считать всё из строки, воспользуйтесь классом
После вы можете редактировать объект, добавлять значения, отбавлять или переводить всё в строку.
#lesson #theory
Для работы с датами и временем, у нас, в пакете
java.util
, есть класс Date. При создании экземпляра с пустым конструктором вы получаете время и дату, которая сейчас. Если же вам надо считать всё из строки, воспользуйтесь классом
SimpleDateFormat
и его методом parse()
. После вы можете редактировать объект, добавлять значения, отбавлять или переводить всё в строку.
#lesson #theory
Работаем с базами данных
Для этого в Java есть универсальный драйвер, который может работать с реляционными базами данных (Oracle, MySQL). Называется он JDBC.
Java Database Connectivity позволяет нам:
• Создавать соединения с БД.
• Создавать и выполнять SQL выражений.
• Просматривать и менять полученные записи.
Но, стоит отметить, что перед использованием вам всё равно придётся добавлять зависимости для работы с нужной базой данных.
#lesson #database
Для этого в Java есть универсальный драйвер, который может работать с реляционными базами данных (Oracle, MySQL). Называется он JDBC.
Java Database Connectivity позволяет нам:
• Создавать соединения с БД.
• Создавать и выполнять SQL выражений.
• Просматривать и менять полученные записи.
Но, стоит отметить, что перед использованием вам всё равно придётся добавлять зависимости для работы с нужной базой данных.
#lesson #database
Основные принципы ООП
Инкапсуляция — возможность пользователю класса не задумываться, как механика реализована внутри. Вам не нужно знать, как работает электричество, если вы хотите просто включить лампочку.
Наследование — позволяет создавать новые классы на основе уже существующих. Таким образом можно менять поведение или добавлять новый функционал.
Полиморфизм — возможность объектов с разной спецификацией иметь различную реализацию. Человек, собака и кошка могут есть, но делают это по разному.
#lesson #oop
Инкапсуляция — возможность пользователю класса не задумываться, как механика реализована внутри. Вам не нужно знать, как работает электричество, если вы хотите просто включить лампочку.
Наследование — позволяет создавать новые классы на основе уже существующих. Таким образом можно менять поведение или добавлять новый функционал.
Полиморфизм — возможность объектов с разной спецификацией иметь различную реализацию. Человек, собака и кошка могут есть, но делают это по разному.
#lesson #oop
NullPointerException
Эта ошибка появляется, если значение не задано какой-то переменной, а мы пытаемся получить доступ к их параметрам.
К сожалению, null могут принимать все ссылочные типы. Это массивы, классы и даже строки. Но вот числа никогда не будут null (поскольку это не ссылочные типы).
Что с этим делать? Достаточно просто добавить проверку на null и что-то делать с этим (выбрасывать ошибку или задавать значение по умолчанию).
#lesson #theory #errors
Эта ошибка появляется, если значение не задано какой-то переменной, а мы пытаемся получить доступ к их параметрам.
К сожалению, null могут принимать все ссылочные типы. Это массивы, классы и даже строки. Но вот числа никогда не будут null (поскольку это не ссылочные типы).
Что с этим делать? Достаточно просто добавить проверку на null и что-то делать с этим (выбрасывать ошибку или задавать значение по умолчанию).
#lesson #theory #errors
Интерфейс Comparable
Помимо обычных коллекций, в Java существуют Sorted... коллекции. Их значения автоматически сортируются в натуральном порядке.
Для реализации такой сортировки тип значения должен имплементировать интерфейс Comparable. Он сравнивает два объекта и возвращает "разницу" между ними в виде числа.
В дальнейшем это разница будет использованная для сортировки значений в коллекции.
#lesson #collections
Помимо обычных коллекций, в Java существуют Sorted... коллекции. Их значения автоматически сортируются в натуральном порядке.
Для реализации такой сортировки тип значения должен имплементировать интерфейс Comparable. Он сравнивает два объекта и возвращает "разницу" между ними в виде числа.
В дальнейшем это разница будет использованная для сортировки значений в коллекции.
#lesson #collections
Почему так много кода
Если ваш первый язык не Java, вы скорее всего задавались вопросом: "Почему просто чтобы начать программу или вывести текст в консоль нужно писать так много кода?"
Ответ кроется в структуре языка. В Java всё поделено на классы и объекты, в свою очередь у которых есть атрибуты и методы.
Разберём случай с выводом
#lesson #theory
Если ваш первый язык не Java, вы скорее всего задавались вопросом: "Почему просто чтобы начать программу или вывести текст в консоль нужно писать так много кода?"
Ответ кроется в структуре языка. В Java всё поделено на классы и объекты, в свою очередь у которых есть атрибуты и методы.
Разберём случай с выводом
System.out.println()
. Казалось бы, можно же просто ограничится функцией println. Но если мы захотим вывести текст в другой поток, например в System.err? В реализации Java будет достаточно сменить атрибут out -> err#lesson #theory
Записи Record
Часто некоторые классы созданы лишь для хранения и передачи данными между другими классами. Зачастую это просто набор публичных полей с модификатором final и конструктор, в котором задают им значения.
Для более упрощённого создания таких классов в JDK 15 появилось новое ключевое слово record. По своей сути, это синтаксический сахар для метода описанного выше.
#lesson #features
Часто некоторые классы созданы лишь для хранения и передачи данными между другими классами. Зачастую это просто набор публичных полей с модификатором final и конструктор, в котором задают им значения.
Для более упрощённого создания таких классов в JDK 15 появилось новое ключевое слово record. По своей сути, это синтаксический сахар для метода описанного выше.
#lesson #features
Ветвление switch
В Java существует два основных типа ветвлений скрипта: if...else и switch. Первый тип проверят некое условие и если оно верно — выполняет код.
В свою очередь switch получает на вход проверяемое значение и сравнивает его с перезаписанными данными. Если какой-то случай case совпадает, то JVM выполняет соответствующий код.
Отличительной особенностью switch есть то, что все его условия статические и компилируются сразу в байткод.
#lesson #keyword
В Java существует два основных типа ветвлений скрипта: if...else и switch. Первый тип проверят некое условие и если оно верно — выполняет код.
В свою очередь switch получает на вход проверяемое значение и сравнивает его с перезаписанными данными. Если какой-то случай case совпадает, то JVM выполняет соответствующий код.
Отличительной особенностью switch есть то, что все его условия статические и компилируются сразу в байткод.
#lesson #keyword
Вектор в Java
До появления системы Collections в Java часто использовался класс Vector<E> — старый аналог нынешнего ArrayList.
Основным отличием вектора от списка в распределении динамической памяти. При добавлении нового элемента в вектор он пересоздаёт массив с данными, прибавляя 1 к длиннее. В свою очередь, список умножает длину на 2.
Из этого можно сделать вывод: векторы меньше расходуют память, но требуют большего времени для добавления элемента
#lesson #collection
До появления системы Collections в Java часто использовался класс Vector<E> — старый аналог нынешнего ArrayList.
Основным отличием вектора от списка в распределении динамической памяти. При добавлении нового элемента в вектор он пересоздаёт массив с данными, прибавляя 1 к длиннее. В свою очередь, список умножает длину на 2.
Из этого можно сделать вывод: векторы меньше расходуют память, но требуют большего времени для добавления элемента
#lesson #collection
Конструкция do...while
Эта конструкция встречается редко на практике, но знать её нужно. Описать её можно как дополнение к привычному всем while(condition).
Суть в чём: сначала в блоке do{...} пишется код, а после вызывается while(condition). В результате обязательно выполнится код в блоке do, а после начнётся цикл while.
#lesson #features
Эта конструкция встречается редко на практике, но знать её нужно. Описать её можно как дополнение к привычному всем while(condition).
Суть в чём: сначала в блоке do{...} пишется код, а после вызывается while(condition). В результате обязательно выполнится код в блоке do, а после начнётся цикл while.
#lesson #features
Regex-выражения в Java
Работа с Regex а Java максимально упрощенна и сводится к двум основным классам – Pattern и Matcher.
Класс Pattern хранит в себе само выражение и может создать Matcher для него. Также для упрощённой работы в нём есть статические методы для проверки без создания Matcher-а.
#lesson #regex
Работа с Regex а Java максимально упрощенна и сводится к двум основным классам – Pattern и Matcher.
Класс Pattern хранит в себе само выражение и может создать Matcher для него. Также для упрощённой работы в нём есть статические методы для проверки без создания Matcher-а.
#lesson #regex