Сообщения

Java. Паттерн Strategy

Изображение
Strategy - это поведенческий паттерн, для определения схожихалгоритмов.Здесь похожие алгоритмы print для StrategyA и StrategyB. Эти два класса реализуют один интерфейс IPrint.Класс ContextStrategy - содержит IPrint iPrint IPrint иsetiPrint - для уставноки нужной стратегии и метод print,который содержит this.iPrint.print





public interface IPrint {
void print(String message);
}public class StrategyA implements IPrint {
@Override
public void print(String message) {
System.out.println("StrategyA " + message);
}
}public class StrategyB implements IPrint {
@Override
public void print(String message) {
System.out.println("StrategyB " + message);
}
}public class ContextStrategy {
private IPrint iPrint;

public void setiPrint(IPrint iPrint) {
this.iPrint = iPrint;
}

public void print(String message) {
this.iPrint.print(message);
}


public void setiPrintAndPrint(IPrint iPrint, String message) {
this.iPrint = iPrint;
this.iPrint.print(message);
}

}
public class MainCl…

Java. Разбор FunctionalInterface Function и Predicate

Разбор FunctionalInterface Function:
@FunctionalInterface
public interface Function<T, R> {R apply(T t);}
У функционального интерфейса Function есть несколько методов, которые почему-торедко используют:andThencomposeТут, конечно, проще использовать UnaryOperatorкоторый extends Function<T, T>
Function<String, String> func1 = s -> s + "1";
Function<String, String> func2 = s -> s + "2";
Function<String, String> func3 = s -> s + "3";
Function<String, String> func4 = s -> s + "4";func1.andThen(func2).andThen(func3).andThen(func4).apply("AND_");//тут будет выведено AND_1234func1.compose(func2).compose(func3).compose(func4).apply("COMPOSE_");//тут вывод в обратном порядке COMPOSE_4321Но можно еще и миксовать func1.andThen(func2).compose(func3).andThen(func4).apply("MIX_");//MIX_3124 - те сначала будет выведены compose, а потом andThen
Разбор FunctionalInterface Predicate:Методы :andn…

Java. Объединение строк

Изображение
Для соединения строк:
 String.join
 Класс StringJoiner
 Collectors.joining 

 String.joinВ Java8 добавили метод join для соединения строк с заданным разделителем.
Тут разделитель пробел:
String joinedString = String.join(" ","My","name","is","Victor");System.out.println(joinedString);Вывод:My name is VictorТакже можно объединять данные в строковых коллекциях:List<String> userNames = Arrays.asList("Ivanov" , "Petrov", "Sidoriv");System.out.println(String.join(", ", userNames));Вывод:Ivanov, Petrov, Sidoriv
Класс StringJoiner
Класс служит для объединения строк с заданным разделителем.Можно делать так:StringJoiner joinerNames = new StringJoiner(", ");joinerNames.add("Ivanov");joinerNames.add("Petrov");joinerNames.add("Sidorov");System.out.println(joinerNames.toString());Вывод:Ivanov, Petrov, Sidorov
Можно сделать короче запись:StringJoiner joinerNames = new String…

Java. Основы FunctionalInterface

Начиная с Java 8 туда добавили FunctionalInterface.Функциональный интерфейс, это интерфейс, который имеет только один абстрактный метод. Также данный интерфейс может иметь defauld и static методы.Примеры - Runnable (метод run), Comparator(метод compare) и тд. Создадим свой интерфейс:
interface Console {
void print(String message);
}Данный интерфейс является функциональным, тк имеет только один абстрактныйметод print. Хорошим тоном считается добавить аннотацию @FunctionalInterfaceчтобы у компилятора была проверка на один абстрактный метод.
@FunctionalInterface interface Console { void print(String message);
}
Раньше мы писали вот так:Console con = new Console() {
@Override
public void print(String message) {
System.out.println(message);
}
};
con.print("Test");Но это слишком много кода, благодаря функциональным интерфейсам можно сделать:Console con = msg -> System.out.println(msg);
con.print("Test");
Разберем самые известные функциональные интерфейсы с Java8:Predicate…

Java. Сортировки коллекций

Изображение
Рассмотрим сортировки объектов в Java:Методы:
1.sort
2.reversed
3.thenComparing
4.Collections.sort
public class User {
private String userName;
private int userAge;

public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}

public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Ivan", 34));
users.add(new User("Alex", 35));
users.add(new User("Max", 21));
users.add(new User("Tom", 45));
users.add(new User("Richard", 52));
users.add(new User("Donald", 19));
return users;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public int getUserAge() {
return userAge;
}

public void setUserAge(int userAge) {
this.userAge = userAge;
}

@Override
public String toString() {
return "User{" +
"userName='" …

Java. Крутые фишки коллекций

Рассмотрим крутые фишки коллекций в Java:
clear
subList
replaceAll
Наш класс User:public class User {
private String userName;
private int userAge;

public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}

public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Ivan", 34));
users.add(new User("Alex", 35));
users.add(new User("Max", 21));
users.add(new User("Tom", 45));
users.add(new User("Richard", 52));
users.add(new User("Donald", 19));
return users;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public int getUserAge() {
return userAge;
}

public void setUserAge(int userAge) {
this.userAge = userAge;
}

@Override
public String toString() {
return "User{" +
"userName='" + userName + '\…

Java. Удаление данных из коллекции

Методы удаления из коллекций:
- remove(int index)
- boolean remove(Object o)
- boolean removeAll
- default boolean removeIf

Есть класс User:public class User {
private String userName;
private int userAge;

public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}

public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Ivan", 34));
users.add(new User("Alex", 35));
users.add(new User("Max", 21));
users.add(new User("Tom", 45));
users.add(new User("Richard", 52));
users.add(new User("Donald", 19));
return users;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public int getUserAge() {
return userAge;
}

public void setUserAge(int userAge) {
this.userAge = userAge;
}

@Override
public String toString() {
return "Use…

Java. Разбор класса Collections

В Java есть класс Collections, рассмотрим его основные методы:
- shuffle 
- fill
- reverse
- frequency
- min 
- max 
- addAll 
- replaceAll Для начала создадим класс обычный POJO класс User:import java.util.ArrayList;
import java.util.List;

public class User {
private String userName;
private int userAge;

public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}

public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Ivan", 34));
users.add(new User("Alex", 35));
users.add(new User("Max", 21));
users.add(new User("Tom", 45));
users.add(new User("Richard", 52));
users.add(new User("Donald", 19));
return users;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public int getUserAge() {
return userAge;
}

public void setUserA…