Сообщения

Сообщения за сентябрь, 2020

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 iPr

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

Разбор FunctionalInterface  Function: @FunctionalInterface public interface Function< T , R > { R apply( T t); } У функционального интерфейса Function есть несколько методов, которые почему-то редко используют: andThen compose Тут, конечно, проще использовать 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_1234 func1.compose(func2).compose(func3).compose(func4).apply( "COMPOSE_" ); //тут вывод в обратном порядке COMPOSE_4321 Но можно еще и миксовать func1.andThen(func2).compose(func3).andThen(func4).apply( "MIX_" ); //MIX_3124 - те сначала будет выведены compose, а потом andThen Разбор Fun

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 Можно сделать короче запись: StringJoin

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" ); Разберем самые изве

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 v

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

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() {

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 setUs