От всей души поздравляю всех программистов и им сочувствующих! 🎉
Пусть код всегда будет чистым, как слеза, проекты — увлекательными и вдохновляющими, а коллеги — понимающими и дружелюбными! Желаю тебе легких решений сложных задач и бесконечного потока креатива. Пусть каждый день приносит новые вызовы и радости в мир программирования! 🚀
Пусть код всегда будет чистым, как слеза, проекты — увлекательными и вдохновляющими, а коллеги — понимающими и дружелюбными! Желаю тебе легких решений сложных задач и бесконечного потока креатива. Пусть каждый день приносит новые вызовы и радости в мир программирования! 🚀
1🎉31❤🔥1❤1
👍5🎉3
В Java классы-обёртки (wrapper classes) используются для того, чтобы представлять примитивные типы данных как объекты. Это необходимо, так как Java — это объектно-ориентированный язык, и в некоторых случаях, например, при работе с коллекциями, нужно использовать объекты вместо примитивных типов. Для каждого примитивного типа данных существует соответствующий класс-обёртка.
Java автоматически преобразует примитивные типы в соответствующие объекты классов-обёрток и наоборот. Это упрощает код, так как программисту не нужно делать это вручную.
Все классы-обёртки являются неизменяемыми, то есть их значения не могут быть изменены после создания.
Некоторые классы-обёртки, такие как Byte, Short, Integer и Long, кэшируют значения в определённом диапазоне (от -128 до 127), что улучшает производительность при частом использовании этих значений.
#java #wrappers
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍7
Метод
Stream.flatMap используется для преобразования элементов одного потока (stream) в несколько элементов другого потока, а затем объединения этих элементов в один поток. Это особенно полезно, когда у вас есть коллекция коллекций, и вы хотите "распрямить" её, т.е. получить плоскую структуру, содержащую все элементы.Допустим, у вас есть список строк, каждая из которых содержит несколько слов, и вы хотите получить поток всех слов:
List<String> sentences = Arrays.asList("Java is fun", "I love programming");
Stream<String> wordsStream = sentences.stream()
.flatMap(sentence -> Arrays.stream(sentence.split(" "))); // Преобразуем в поток слов
wordsStream.forEach(System.out::println);
Результат:
Java
is
fun
I
love
programming
Здесь каждый массив слов был преобразован в поток, а затем
flatMap "распрямил" эти потоки в один.#java #stream #flatMap
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Методы
Stream.toList() и Stream.collect(Collectors.toList()) кажутся схожими, так как оба возвращают список, но есть ключевое отличие: Stream.toList() возвращает неизменяемый список, а Stream.collect(Collectors.toList()) возвращает изменяемый список на базе ArrayList.#java #stream #toList
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤3
Thread - это класс, некоторая надстройка над физическим потоком.Runnable - это интерфейс, представляющий абстракцию над выполняемой задачей.Интерфейс
Runnable позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.#java #Thread #Runnable
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Интерфейс
CharSequence представляет собой последовательность символов и является базовым интерфейсом для работы с различными строковыми типами. Он был введён в Java начиная с версии 1.4 и служит для предоставления общего интерфейса для объектов, которые могут быть представлены как последовательность символов.CharSequence реализован такими классами, как:String — неизменяемая строка.StringBuilder — изменяемая последовательность символов.StringBuffer — изменяемая, но потокобезопасная последовательность символов.CharSequence определяет несколько методов, которые предоставляют доступ к символам последовательности и информации о ней:
int length();
Возвращает количество символов в последовательности.
char charAt(int index);
Возвращает символ по указанному индексу.
CharSequence subSequence(int start, int end);
Возвращает новую последовательность символов, которая является подстрокой оригинальной последовательности. Индекс
start включается, а end — нет.
String toString();
Возвращает строковое представление последовательности символов.
CharSequence cs = "Hello, World!";
System.out.println("Length: " + cs.length());
System.out.println("Char at index 1: " + cs.charAt(1));
System.out.println("Subsequence (0, 5): " + cs.subSequence(0, 5));
System.out.println("String: " + cs.toString());
Вывод:
Length: 13
Char at index 1: e
Subsequence (0, 5): Hello
String: Hello, World!
#java #CharSequence
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🥰1
🔥7❤1🤔1🎉1
Потоки данных поддерживают метод
skip(n), возвращающий поток данных с отброшенными первыми n элементами источника. Если в потоке-источнике было меньше n элементов, возвращается пустой поток.Например, следующий код пропускает первые два блюда, содержащие более 300 калорий, и возвращает остальные:
List<Dish> dishes = menu
.stream()
.filter(d -> d.getCalories() > 300)
.skip(2)
.collect(toList());
#java #stream #skip
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7❤3
Внутри много интересного, например Markdown документация, поддержка примитивных типов в паттернах и операторах
instanceof / switch и многое другое.Появился еще один тип классов - неявный, как будто существующих нам было мало 😁
Теперь приложение может стартовать даже если метод
main не статический и не содержит параметр String[] args:
// --enable-preview --source 23
class HelloWorld {
void main() {
System.out.println("Hello, World!");
}
}
В таком случае во время запуска JVM сама создаст экземпляр класса
HelloWorld и вызовет у него метод main():
$ java --enable-preview --source 23 HelloWorld.java
Hello, World!
И даже вот так!:
// HelloWorld.java
String greeting = "Hello, World!";
void main() {
println(greeting);
}
То есть вообще не объявляя класса! В таком случае виртуальная машина сама объявит неявный класс, в который поместит метод
main() и другие верхнеуровневые объявления в файле. Фишка здесь еще и в том что используется метод println() вместо System.out.println(), это возможно из-за того что в неявный класс по умолчанию импортируется новый класс java.io.IO, в котором есть соответствующий метод.Подробнее можно почитать на Habr'е.
#java23
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Вышла Java 23
Вышла общедоступная версия Java 23 . В этот релиз попало около 2400 закрытых задач и 12 JEP'ов . Release Notes можно посмотреть здесь . Полный список изменений API – здесь . Java 23 не является...
1👍14😢8❤4
Ромбовидное наследование (diamond inheritance) — ситуация в объектно-ориентированных языках программирования с поддержкой множественного наследования, когда два класса B и C наследуют от A, а класс D наследует от обоих классов B и C. При этой схеме наследования может возникнуть неоднозначность: если объект класса D вызывает метод, определенный в классе A (и этот метод не был переопределен в классе D), а классы B и C по-своему переопределили этот метод, то от какого класса его наследовать: B или C?
В Java множественное наследование не разрешено для классов и разрешено только для интерфейсов, чтобы устранить эту серьезную проблему.
#java #diamond #problem
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🥰1
🎉10👍2
Метод
anyMatch служит для ответа на вопрос: «Удовлетворяет ли заданному предикату хотя бы один элемент из потока данных?»Метод
anyMatch возвращает boolean, а значит, является завершающей (терминальной) операцией.
int[] digits = {1, 3, 5, 7, 2, 9};
boolean result = Arrays.stream(digits).anyMatch(d -> d % 2 == 0);
System.out.println(result); // true
#java #Stream #anyMatch
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14
Метод
allMatch проверяет, удовлетворяют ли заданному предикату все элементы потока данных.
// Все не чётные?
int[] digits = {1, 3, 5, 7, 9};
boolean result = Arrays.stream(digits).allMatch(d -> d % 2 != 0);
System.out.println(result); // true
Противоположностью
allMatch является метод noneMatch. Он проверяет, точно ли ни один элемент списка не соответствует заданному предикату.
// Нет чётных?
int[] digits = {1, 3, 5, 7, 9};
boolean result = Arrays.stream(digits).noneMatch(d -> d % 2 == 0);
System.out.println(result); // true
#java #Stream #allMatch #noneMatch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
🥱11👍3👏2🎉1