Java for Beginner
713 subscribers
644 photos
173 videos
12 files
1.01K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
А когда она еще и не запустилась, надо два таких героя 😂 😂

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
💯3😁1
Создание своего функционального интерфейса

Вы можете создать свой функциональный интерфейс, если встроенные интерфейсы не подходят для ваших задач.

Для этого нужно:
Определить интерфейс с одним абстрактным методом.
Добавить аннотацию
@FunctionalInterface.

Пример:
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}


Использование интерфейса с лямбда-выражением

Теперь вы можете использовать этот интерфейс для создания лямбда-выражений:
Calculator add = (a, b) -> a + b;
Calculator subtract = (a, b) -> a - b;

System.out.println(add.calculate(10, 5)); // 15
System.out.println(subtract.calculate(10, 5)); // 5


Нюансы использования

Функциональные интерфейсы могут содержать default-методы и static-методы, но только один абстрактный метод.
Если вы используете аннотацию
@FunctionalInterface, компилятор будет проверять, что интерфейс действительно функциональный.

Пример с default-методом

@FunctionalInterface
interface Greeting {
void sayHello(String name);

default void sayGoodbye() {
System.out.println("Goodbye!");
}
}

public class Main {
public static void main(String[] args) {
Greeting greeting = name -> System.out.println("Hello, " + name);
greeting.sayHello("Alice"); // Hello, Alice
greeting.sayGoodbye(); // Goodbye!
}
}


#Java #Training #Medium #Functional_programming #FunctionalInterface
👍3
Цитата дня: Джефф Безос

"Искусственный интеллект — это будущее, и будущее уже здесь."


Эта фраза принадлежит Джеффу Безосу, основателю Amazon. Ее суть — в том, что технологии, которые кажутся футуристичными, уже становятся частью нашей реальности. Безос использовал этот принцип, внедряя AI в Amazon и другие свои проекты, чтобы опережать конкурентов.

Отличный повод задуматься: как мы можем использовать новые технологии, чтобы оставаться впереди?


Почитать био:
https://habr.com/ru/articles/299774/

И негативчик:
https://habr.com/ru/articles/541744/

#Citation #Biography
👍1
📌 Факт дня:

А вы знали, что Google изначально назывался 'Backrub'?

Да, это правда! Основатели Ларри Пейдж и Сергей Брин решили, что "Google" звучит лучше. И они были правы. Представьте, если бы мы сегодня говорили: "Просто загугли это... ой, то есть 'бэкрубни'.


#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Интерфейс Predicate<T>

Predicate<T> — это функциональный интерфейс, представленный в Java 8 в пакете java.util.function. Он используется для проверки условия и возвращает boolean значение (true или false). Интерфейс имеет один абстрактный метод test(T t), который принимает объект типа T и возвращает boolean.

@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}


Как работает метод test?


Метод test — это основной метод интерфейса Predicate. Он принимает объект типа T и проверяет его на соответствие некоторому условию. Результатом выполнения метода является boolean.

Пример:
Predicate<Integer> isEven = number -> number % 2 == 0;
System.out.println(isEven.test(4)); // true
System.out.println(isEven.test(5)); // false
Здесь мы создали Predicate, который проверяет, является ли число четным. Метод test применяется к числам 4 и 5, возвращая true и false соответственно.


Плюсы и минусы использования Predicate

Плюсы:
Упрощает код, делая его более читаемым и выразительным.
Позволяет легко комбинировать условия с помощью методов and, or, negate.
Широко используется в Stream API для фильтрации данных.

Минусы:
Может быть избыточным для простых условий, где можно обойтись обычным if.
Требует понимания функционального программирования для эффективного использования.
Пример использования Predicate в фильтрации данных


Один из самых распространенных сценариев использования Predicate — это фильтрация данных в Stream API.
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class PredicateExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");

// Создаем Predicate для фильтрации имен, начинающихся на "A"
Predicate<String> startsWithA = name -> name.startsWith("A");

// Фильтруем список с помощью Stream API
List<String> filteredNames = names.stream()
.filter(startsWithA)
.collect(Collectors.toList());

System.out.println(filteredNames); // [Alice]
}
}
В этом примере мы используем Predicate для фильтрации имен, начинающихся на букву "A". Метод filter в Stream API принимает Predicate и оставляет только те элементы, которые удовлетворяют условию.


#Java #Training #Medium #Functional_programming #Predicate
👍4
Что выведет код?

import java.util.Arrays;

public class Task280125 {
public static void main(String[] args) {
int[] arr = {5, 3, 9, 1, 7};
Arrays.sort(arr);
System.out.println(arr[arr.length / 2]);
}
}


#Tasks
👍2
Варианты ответа:
Anonymous Quiz
26%
3
55%
5
2%
7
12%
9
5%
Java
👍1
Не знаю у кого как, но моя кошка именно так и делает. И выглядит порой 😂 😂

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Методы and, or, negate класса Predicate и их использование

Метод and

Метод and позволяет комбинировать два Predicate с помощью логического оператора "И". Результирующий Predicate вернет true, только если оба исходных Predicate вернут true.

Пример:
Predicate<Integer> isEven = number -> number % 2 == 0;
Predicate<Integer> isGreaterThan10 = number -> number > 10;

// Комбинируем два Predicate
Predicate<Integer> isEvenAndGreaterThan10 = isEven.and(isGreaterThan10);

System.out.println(isEvenAndGreaterThan10.test(12)); // true
System.out.println(isEvenAndGreaterThan10.test(8)); // false


Метод or

Метод or комбинирует два Predicate с помощью логического оператора "ИЛИ". Результирующий Predicate вернет true, если хотя бы один из исходных Predicate вернет true.

Пример:
Predicate<String> startsWithA = name -> name.startsWith("A");
Predicate<String> endsWithE = name -> name.endsWith("e");

// Комбинируем два Predicate
Predicate<String> startsWithAOrEndsWithE = startsWithA.or(endsWithE);

System.out.println(startsWithAOrEndsWithE.test("Alice")); // true
System.out.println(startsWithAOrEndsWithE.test("Eve")); // true
System.out.println(startsWithAOrEndsWithE.test("Bob")); // false


Метод negate

Метод negate возвращает Predicate, который является логическим отрицанием исходного. Если исходный Predicate возвращает true, то negate вернет false, и наоборот.

Пример:
Predicate<Integer> isEven = number -> number % 2 == 0;

// Создаем отрицание Predicate
Predicate<Integer> isOdd = isEven.negate();

System.out.println(isOdd.test(5)); // true
System.out.println(isOdd.test(4)); // false


Пример использования комбинированных Predicate в Stream API

Теперь давайте рассмотрим пример, где мы используем комбинированные Predicate для фильтрации данных.
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class CombinedPredicateExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// Создаем Predicate для четных чисел и чисел больше 5
Predicate<Integer> isEven = number -> number % 2 == 0;
Predicate<Integer> isGreaterThan5 = number -> number > 5;

// Комбинируем Predicate
Predicate<Integer> isEvenAndGreaterThan5 = isEven.and(isGreaterThan5);

// Фильтруем список с помощью Stream API
List<Integer> filteredNumbers = numbers.stream()
.filter(isEvenAndGreaterThan5)
.collect(Collectors.toList());

System.out.println(filteredNumbers); // [6, 8, 10]
}
}
В этом примере мы комбинируем два Predicate с помощью метода and, чтобы отфильтровать только четные числа, которые больше 5.


Или укороченный (и предпочтительный) вариант:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class CombinedPredicateExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer> filteredNumbers = numbers.stream()
.filter(number -> number % 2 == 0 && number > 5)
.collect(Collectors.toList());

System.out.println(filteredNumbers); // [6, 8, 10]
}
}



#Java #Training #Medium #Functional_programming #Predicate #and #or #negate
👍4
✏️ Цитата дня: Дональд Кнут

"Код — это поэзия."


Эта фраза принадлежит Дональду Кнуту, автору знаменитой книги "Искусство программирования". Ее суть — в том, что написание кода — это не просто технический процесс, но и творчество, требующее элегантности и красоты. Кнут использовал этот подход, чтобы показать, что программирование — это искусство.

Отличный повод задуматься: насколько наш код отражает наше стремление к совершенству?


Почитать био:
https://habr.com/ru/articles/63078/

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Факт дня:

А вы знали, что первый смайлик был создан в 1982 году?

Программист Скотт Фалман предложил использовать :-) для обозначения шуток. Сегодня мы используем тысячи эмодзи, но этот смайлик — настоящий прадедушка всех смайликов.


#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Интерфейс Consumer<T> и метод accept

Consumer<T> — это функциональный интерфейс, представленный в Java 8 в пакете java.util.function. Он используется для выполнения действий над объектом типа T, не возвращая никакого результата. Интерфейс имеет один абстрактный метод accept(T t), который принимает объект типа T и выполняет над ним некоторое действие.

@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}


Как работает метод accept?

Метод accept — это основной метод интерфейса Consumer. Он принимает объект типа T и выполняет над ним некоторое действие. Результатом выполнения метода является void, то есть метод не возвращает никакого значения.

Пример:
Consumer<String> printUpperCase = str -> System.out.println(str.toUpperCase());
printUpperCase.accept("hello"); // HELLO
Здесь мы создали Consumer, который принимает строку и выводит ее в верхнем регистре. Метод accept применяется к строке "hello", и результат выводится на экран.


Плюсы и минусы использования Consumer

Плюсы:
Упрощает код, делая его более читаемым и выразительным.
Позволяет легко выполнять действия над объектами, особенно в сочетании с Stream API.
Поддерживает лямбда-выражения, что делает код более компактным.


Минусы:
Может быть избыточным для простых действий, где можно обойтись обычным методом.
Требует понимания функционального программирования для эффективного использования.


Пример использования Consumer для выполнения действий над объектами

Один из самых распространенных сценариев использования Consumer — это выполнение действий над элементами коллекции.
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class ConsumerExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");

// Создаем Consumer для вывода имен в верхнем регистре
Consumer<String> printUpperCase = name -> System.out.println(name.toUpperCase());

// Применяем Consumer к каждому элементу списка
names.forEach(printUpperCase);
}
}
В этом примере мы используем Consumer для вывода каждого имени из списка в верхнем регистре. Метод forEach принимает Consumer и применяет его к каждому элементу списка.


#Java #Training #Medium #Functional_programming #Consumer #accept
2👌1
Что выведет код?

import java.util.TreeMap;

public class Task290125 {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
map.put("date", 4);

System.out.println(map.lowerKey("banana"));
}
}


#Tasks
👍2
Варианты ответа:
Anonymous Quiz
24%
apple
42%
banana
5%
cherry
29%
null
👍1
Ты же программист, помоги 😁

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👎1
Более сложные сценарии использования Consumer

Метод andThen

Метод andThen позволяет комбинировать два Consumer таким образом, что сначала выполняется первый Consumer, а затем второй. Это полезно, когда нужно выполнить несколько действий над одним объектом.

Пример:
Consumer<String> printUpperCase = str -> System.out.println(str.toUpperCase());
Consumer<String> printLowerCase = str -> System.out.println(str.toLowerCase());

// Комбинируем два Consumer
Consumer<String> printBoth = printUpperCase.andThen(printLowerCase);

printBoth.accept("Hello"); // HELLO hello
В этом примере мы создали два Consumer: один выводит строку в верхнем регистре, а другой — в нижнем. Метод andThen объединяет их, и результат выполнения printBoth — это сначала вывод строки в верхнем регистре, а затем в нижнем.


Пример использования Consumer в Stream API

Consumer часто используется в Stream API для выполнения действий над элементами потока.
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class StreamConsumerExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// Создаем Consumer для вывода квадратов чисел
Consumer<Integer> printSquare = number -> System.out.println(number * number);

// Применяем Consumer к каждому элементу потока
numbers.stream().forEach(printSquare);
}
}
В этом примере мы используем Consumer для вывода квадратов чисел из списка. Метод forEach в Stream API принимает Consumer и применяет его к каждому элементу потока.


Пример использования Consumer с другими функциональными интерфейсами

Consumer можно комбинировать с другими функциональными интерфейсами, такими как Predicate, для создания более сложных сценариев.
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class CombinedExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");

// Создаем Predicate для фильтрации имен, начинающихся на "A"
Predicate<String> startsWithA = name -> name.startsWith("A");

// Создаем Consumer для вывода имен
Consumer<String> printName = name -> System.out.println(name);

// Фильтруем и выводим имена, начинающиеся на "A"
names.stream()
.filter(startsWithA)
.forEach(printName); // Alice
}
}
В этом примере мы используем Predicate для фильтрации имен, начинающихся на "A", и Consumer для вывода отфильтрованных имен.


#Java #Training #Medium #Functional_programming #Consumer #andThen
👍3
✏️ Цитата дня: Тим Бернерс-Ли

"Технологии — это не цель, а средство."


Эта фраза принадлежит Тиму Бернерсу-Ли, создателю Всемирной паутины. Ее суть — в том, что технологии должны служить людям, а не быть самоцелью. Бернерс-Ли использовал этот принцип, создавая WWW как инструмент для обмена знаниями и объединения людей.

Отличный повод задуматься: как мы можем использовать технологии, чтобы сделать мир лучше?


Почитать био:
https://habr.com/ru/companies/timeweb/articles/820317/

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1💯1