From 7d718892de5c8ed242853baab124b52fdfeb5a89 Mon Sep 17 00:00:00 2001 From: "matviets.m" Date: Tue, 21 Oct 2025 14:09:45 +0500 Subject: [PATCH 1/3] initial --- src/main/resources/dummy-file | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/dummy-file diff --git a/src/main/resources/dummy-file b/src/main/resources/dummy-file new file mode 100644 index 0000000..e69de29 From dbcd9fae887f867e601bbd68c26b1ac0dffe7ed2 Mon Sep 17 00:00:00 2001 From: "matviets.m" Date: Fri, 24 Oct 2025 21:11:25 +0500 Subject: [PATCH 2/3] functional task. --- src/main/java/functional/Functional.java | 100 +++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/main/java/functional/Functional.java diff --git a/src/main/java/functional/Functional.java b/src/main/java/functional/Functional.java new file mode 100644 index 0000000..1015a68 --- /dev/null +++ b/src/main/java/functional/Functional.java @@ -0,0 +1,100 @@ +package functional; + +import java.util.*; +import java.util.function.*; + +public class Functional { + + public static void main(String[] args) { + + // 1. Predicate: строка не пуста и длиннее 3 символов + Predicate validString = s -> s != null && s.length() > 3; + + // 2. Function: возвращает длину строки + Function getStringLength = s -> s.length(); + Function stringLength = String::length; + + + // 3. Supplier: возвращает новый UUID + Supplier randomUUID = () -> UUID.randomUUID(); + + // 4. Consumer: выводит строку в upper case + Consumer stringToUpperCase = s -> s.toUpperCase(); + + // 5. BiFunction: сумма двух чисел + BiFunction sumTwoIntegers = (i, j) -> Integer.sum(i, j); + + // 6. Объединение trim и toUpperCase + Function trim = String::trim; + Function toUpperCase = String::toUpperCase; + Function trimAndThenToUpperCase = trim.andThen(toUpperCase); + + + Function trimThenUpper = trim.andThen(toUpperCase); + + // 7. Объединение двух Consumer + Consumer printString = System.out::println; + Consumer printLength = s -> System.out.println(s.length()); + Consumer printStringAndThenPintLength = printString.andThen(printLength); + + + // 8. Predicate: isEven и isPositive, потом "нечётное или отрицательное" + Predicate isEven = x -> x % 2 == 0; + Predicate isPositive = x -> x > 0; + Predicate oddOrNegative = isEven.negate().or(isPositive.negate()); + + + // 9. BiFunction + Function через andThen() + BiFunction multiply = (a, b) -> a * b; + Function toStr = x -> x.toString(); + BiFunction multiplyThenStr = multiply.andThen(toStr); + + // 10. UnaryOperator: добавляет "!!!" + UnaryOperator adsExclaims = s -> s = s + "!!!"; + } + + // 11. Метод filter(List list, Predicate predicate) + public static List filter(List list, Predicate predicate) { + List result = new ArrayList<>(); + for (T item : list) { + if (predicate.test(item)) { + result.add(item); + } + } + return result; + } + + // 12. Метод map(List list, Function mapper) + public static List map(List list, Function mapper) { + List resultList = new ArrayList<>(); + for (T item : list) { + resultList.add(mapper.apply(item)); + } + return resultList; + } + + // преобразуй List в List (длины строк). + public static List mapStringLengthsToIntegers(List list) { + List resultIntegerList = new ArrayList<>(); + Function getStringLength = s -> s.length(); + resultIntegerList = map(list, getStringLength); + return resultIntegerList; + } + + // 13. Метод forEach(List list, Consumer consumer) + public static void forEach(List list, Consumer consumer) { + for (T t : list) { + consumer.accept(t); + } + } + + + // 14. Метод generate(Supplier supplier, int n) + public static List generate(Supplier supplier, int n) { + List result = new ArrayList<>(); + for (int i = 0; i < n; i++) { + result.add(supplier.get()); + } + return result; + } +} \ No newline at end of file From fe3dd414b20407dcb1f0549256f53da2dde7031e Mon Sep 17 00:00:00 2001 From: "matviets.m" Date: Fri, 24 Oct 2025 22:27:28 +0500 Subject: [PATCH 3/3] steams task. --- src/main/java/streams/Fors.java | 102 +++++++++++++++++++++++++++++ src/main/java/streams/Streams.java | 92 ++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 src/main/java/streams/Fors.java create mode 100644 src/main/java/streams/Streams.java diff --git a/src/main/java/streams/Fors.java b/src/main/java/streams/Fors.java new file mode 100644 index 0000000..528c3c4 --- /dev/null +++ b/src/main/java/streams/Fors.java @@ -0,0 +1,102 @@ +package streams; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class Fors { + public static void main(String[] args) { +// Дан список чисел. Оставь только чётные и выведи их квадраты. + List numbers = List.of(1, 2, 3, 4, 5, 6); + List result = new ArrayList<>(); + for (int n : numbers) { + if (n % 2 == 0) { + result.add(n * n); + } + } + +// Подсчитай, сколько строк в списке длиннее 5 символов. + List words = List.of("apple", "banana", "pear", "pineapple"); + int count = 0; + for (String s : words) { + if (s.length() > 5) { + count++; + } + } + +// Найди максимальное и минимальное число в списке с помощью Stream API. + List nums = List.of(10, 2, 33, 4, 25); + int min = nums.get(0); + int max = nums.get(0); + for (int n : nums) { + if (n < min) min = n; + if (n > max) max = n; + } + +// Посчитай среднюю длину строк в списке. + List names = List.of("Alice", "Bob", "Charlie", "David"); + int totalLength = 0; + for (String s : names) { + totalLength += s.length(); + } + var average = totalLength / names.size(); + + +// Удали дубликаты и отсортируй строки по длине. + List input = List.of("apple", "pear", "apple", "banana", "pear"); + Set unique = new HashSet<>(input); + List result2 = new ArrayList<>(unique); + result2.sort(Comparator.comparingInt(String::length)); + +// Преобразуй список строк в Map: ключ — строка, значение — длина. + List fruits = List.of("apple", "banana", "kiwi"); + var newMap = new HashMap<>(); + for (String s : fruits) { + newMap.put(s, s.length()); + } + +// Сгруппируй имена по первой букве. + List names2 = List.of("Alice", "Andrew", "Bob", "Charlie", "Catherine"); + Map> grouped = new HashMap<>(); + for (String s : names2) { + char first = s.charAt(0); + grouped.computeIfAbsent(first, k -> new ArrayList<>()).add(s); + } + +// Собери список имён в одну строку через запятую. + List names3 = List.of("Tom", "Jerry", "Spike"); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < names3.size(); i++) { + stringBuilder.append(names3.get(i)); + if (i < names3.size() - 1) { + stringBuilder.append(", "); + } + } + String oneStringOfNames = stringBuilder.toString(); + +// Из списка предложений получить список всех слов. + List sentences = List.of("Java is cool", "Streams are powerful"); + List words2 = new ArrayList<>(); + for (String sentence : sentences) { + String[] parts = sentence.split(" "); + for (String word : parts) { + words2.add(word); + } + } + +// Найди самый дорогой продукт в каждой категории. + record Product(String name, String category, double price) {} + List products = List.of( + new Product("Phone", "Electronics", 1200), + new Product("TV", "Electronics", 1800), + new Product("Apple", "Fruits", 2.5), + new Product("Mango", "Fruits", 4.0)); + + } +} \ No newline at end of file diff --git a/src/main/java/streams/Streams.java b/src/main/java/streams/Streams.java new file mode 100644 index 0000000..31e50bc --- /dev/null +++ b/src/main/java/streams/Streams.java @@ -0,0 +1,92 @@ +package streams; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class Streams { + public static void main(String[] args) { + + +// Дан список чисел. Оставь только чётные и выведи их квадраты. +// List numbers = List.of(1, 2, 3, 4, 5, 6); + List numbers = List.of(1, 2, 3, 4, 5, 6); + numbers.stream() + .filter(i -> i % 2 == 0) + .map(i -> i * i) + .toList(); + + +// Подсчитай, сколько строк в списке длиннее 5 символов. + List words = List.of("apple", "banana", "pear", "pineapple"); + var count = words.stream() + .filter(s -> s.length() > 5) + .count(); + +// Найди максимальное и минимальное число в списке с помощью Stream API. + List nums = List.of(10, 2, 33, 4, 25); + var min = nums.stream() + .min(Comparator.naturalOrder()) + .orElseThrow(); + + var max = nums.stream() + .max(Comparator.naturalOrder()) + .orElseThrow(); + + +// Посчитай среднюю длину строк в списке. + List names = List.of("Alice", "Bob", "Charlie", "David"); + var avarage = names.stream() + .mapToInt(s -> s.length()) + .average(); + + +// Удали дубликаты и отсортируй строки по длине. + List input = List.of("apple", "pear", "apple", "banana", "pear"); + var result = input.stream() + .distinct() + .sorted(Comparator.comparingInt(s -> s.length())) + .toList(); + +// Преобразуй список строк в Map: ключ — строка, значение — длина. + List fruits = List.of("apple", "banana", "kiwi"); + var newMap = fruits.stream() + .collect(Collectors.toMap(s -> s, s -> s.length())); + +// Сгруппируй имена по первой букве. + List names2 = List.of("Alice", "Andrew", "Bob", "Charlie", "Catherine"); + + var grouped = names2.stream() + .collect(Collectors.groupingBy(s -> s.charAt(0))); + +// Собери список имён в одну строку через запятую. + List names3 = List.of("Tom", "Jerry", "Spike"); + var oneStringOfNames = names3.stream() + .collect(Collectors.joining(", ")); + +// Из списка предложений получить список всех слов. + List sentences = List.of("Java is cool", "Streams are powerful"); + var splitedToWords = sentences.stream() + .map(s -> s.split(" ")) // each sentence → array of words + .toList(); + + var words2 = splitedToWords.stream() + .flatMap(Arrays::stream) // flatten each array into stream + .toList(); + +// Найди самый дорогой продукт в каждой категории. + record Product(String name, String category, double price) {} + List products = List.of( + new Product("Phone", "Electronics", 1200), + new Product("TV", "Electronics", 1800), + new Product("Apple", "Fruits", 2.5), + new Product("Mango", "Fruits", 4.0)); + + var mostExpensiveByCategory = products.stream() + .collect(Collectors.groupingBy( + Product::category, + Collectors.maxBy(Comparator.comparingDouble(Product::price)) + )); + } +} \ No newline at end of file