public class Quest {
public static void main(String[] args) {
System.out.println(condition(null) ? 1 : 2);
}
public static boolean condition(Number o) {
return true;
}
public static boolean condition(Long l) {
return false;
}
}👍2
❤3👍2👏2🎉1💯1
Дан список людей с именем и возрастом. Нужно найти самого старшего.
import java.util.Comparator;
import java.util.List;
record Person(String name, int age) {}
public class StreamExample {
public static void main(String[] args) {
List<Person> people = List.of(
new Person("Alice", 30),
new Person("Bob", 20),
new Person("Charlie", 40)
);
people.stream()
.max(Comparator.comparingInt(Person::age))
.ifPresent(person -> System.out.println("Oldest person: " + person.name()));
// Вывод: Oldest person: Charlie
}
}
#java #stream #max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍4❤3
Java | Фишки и трюки
Чистый код: создание, анализ и рефакторинг Автор: Роберт Мартин Эту книгу должен прочитать каждый разработчик. А затем перечитывать каждый год! 😁 Плюс для джавистов в том что в книге все примеры написаны на Java. "Чистый код" Роберта Мартина – это практическое…
#java #objects #cleancode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🤔9❤2👍1🔥1😱1🎉1
Статические блоки инициализация используются для выполнения кода, который должен выполняться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретном объекту класса) принадлежит только самому классу (объекту метакласса
Class).#java #static #initialization
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1🔥1
Для нестатических блоков инициализации, если выбрасывание исключения прописано явным образом требуется, чтобы объявления этих исключений были перечислены в
throws всех конструкторов класса. Иначе будет ошибка компиляции. Для статического блока выбрасывание исключения в явном виде, приводит к ошибке компиляции.В остальных случаях, взаимодействие с исключениями будет проходить так же, как и в любом другом месте. Класс не будет инициализирован, если ошибка происходит в статическом блоке и объект класса не будет создан, если ошибка возникает в нестатическом блоке.
#java #initialization #exception
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2❤1
Класс
StringBuilder предназначен для создания и манипуляции изменяемыми строками. Это альтернативный класс для String, который позволяет изменять его содержимое без создания новых объектов при каждой операции изменения, что делает его более эффективным при частых операциях изменения строк.Класс
StringBuilder использует массив символов для хранения строки и динамически изменяет его размер по мере необходимости. Переменная count отслеживает текущую длину строки.Упрощенно:
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence {
char[] value; // Массив символов, хранящий содержимое строки
int count; // Количество символов в текущем объекте StringBuilder
}
Примерная реализация метода
append:
public StringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len); // расширить массив если нужно
str.getChars(0, len, value, count);
count += len;
return this;
}
Метод
str.getChars(..) копирует строку str в массив value в позицию count (то есть добавляет в конец массива).#java #stringbuilder #implementation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3❤1👨💻1
Дан список людей с именем и городом проживания. Нужно сгруппировать их по городам.
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
record Person(String name, String city) {}
public class StreamExample {
public static void main(String[] args) {
List<Person> people = List.of(
new Person("Alice", "New York"),
new Person("Bob", "Los Angeles"),
new Person("Charlie", "New York"),
new Person("David", "Los Angeles"),
new Person("Edward", "San Francisco")
);
Map<String, List<Person>> peopleByCity = people.stream()
.collect(Collectors.groupingBy(Person::city));
peopleByCity.forEach((city, peopleInCity) -> {
System.out.println(city + ": " + peopleInCity.stream()
.map(Person::name)
.collect(Collectors.joining(", ")));
});
// Вывод:
// San Francisco: Edward
// New York: Alice, Charlie
// Los Angeles: Bob, David
}
}
#java #stream #grouping
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4👏2❤1
Если возникшее исключение - наследник
RuntimeException:- для статических блоков инициализации будет выброшено
java.lang.ExceptionInInitializerError;- для нестатических будет проброшено исключение-источник.
Если возникшее исключение - наследник
Error, то в обоих случаях будет выброшено java.lang.Error. Исключение: java.lang.ThreadDeath - смерть потока. В этом случае никакое исключение выброшено не будет.#java #initialization #exception
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👏1
😁7🔥2❤🔥1🎉1🤣1
Даны два списка фруктов. Нужно объединить их в одном стриме, обработать его и вывести результат.
var list1 = List.of("apple", "banana", "cherry");
var list2 = List.of("orange", "pineapple", "mango");
var result = Stream.concat(list1.stream(), list2.stream())
.filter(s -> s.length() > 5)
.toList();
System.out.println(result);
// [banana, cherry, orange, pineapple]
#java #stream #concat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥2❤1👏1
Модульное и интеграционное тестирование — это два различных типа тестирования программного обеспечения, которые служат для разных целей и проводятся на разных этапах процесса разработки.
Модульное тестирование направлено на проверку отдельных частей кода, обычно функций или методов, изолированно от остальных частей системы. Оно позволяет обнаруживать ошибки на ранней стадии разработки, способствует упрощению поиска и исправления дефектов, снижению затрат на исправление ошибок в дальнейшем. В качестве библиотеки для модульного тестирования может быть использована, например JUnit.
Пример: если есть функция, которая выполняет вычисление площади круга, модульный тест будет проверять правильность работы этой функции с разными входными значениями (радиусами).
Интеграционное тестирование направлено на проверку взаимодействия между различными модулями или компонентами системы, чтобы убедиться, что они правильно работают вместе. Одна из библиотек для интеграционного тестирования - TestNG.
Пример: если есть система, состоящая из двух модулей: один выполняет вход пользователя, а другой — отображение информации о пользователе, интеграционный тест проверит, что после успешного входа отображается правильная информация о пользователе.
#java #test #JUnit #TestNG
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1🔥1
🤔4👍3❤1
Цикл for со счетчиком
for (initialization; condition; update) {
// тело цикла
}
Описание:
initialization: выполняется один раз перед началом цикла. Обычно используется для инициализации счетчика.
condition: проверяется перед каждой итерацией. Если условие истинно, выполняется тело цикла.
update: выполняется после каждой итерации. Обычно используется для изменения счетчика.
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(i + ": " + numbers[i]);
}
Применение:
Используется, когда известно количество итераций заранее. Часто применяется для работы с массивами или коллекциями, когда нужен индекс.
Цикл for-each
for (type element : collection) {
// тело цикла
}
Описание:
Итерируется по каждому элементу коллекции (например, массива, списка, множества). Обеспечивает удобный способ доступа к каждому элементу без использования индексов.
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
Применение:
Предпочтителен, когда не нужен доступ к индексам элементов.
Цикл while
while (condition) {
// тело цикла
}
Описание:
condition: проверяется перед каждой итерацией. Если условие истинно, выполняется тело цикла.
String code = UUID.randomUUID().toString();
boolean isCodeExists = repo.isCodeExists(code);
while (isCodeExists) {
code = UUID.randomUUID().toString();
isCodeExists = repo.isCodeExists(code);
}
repo.saveCode(code);
Применение:
Используется, когда количество итераций неизвестно заранее и определяется во время выполнения программы. Цикл может не выполниться ни одного раза.
Цикл do-while
do {
// тело цикла
} while (condition);
Описание:
Выполняет тело цикла хотя бы один раз, а затем проверяет условие condition. Если условие истинно, цикл повторяется.
String command;
do {
command = readCommand();
doCommand(command);
} while (!"EXIT".equals(command));
Применение:
Используется, когда тело цикла должно выполниться хотя бы один раз, независимо от условия. Часто применяется для меню или ввода данных, где сначала нужно выполнить действие, а затем проверить условие.
#java #cycles #for #while
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥1