Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

Карты отображений

AbstractMap<K, V> HashMap<K, V>

TreeMap<K, V>

WeakHashMap<K, V>

LinkedHashMap<K, V> (дважды связанный список ключей)

IdentityHashMap<K, V>

Реализация интерфейсов

1)Интерфейсы коллекций: Map<K, V>, Collection<E>, List<E>, Set<E>

2)Все реализуют интерфейсы Serializable, Cloneable

3)List<E> и Set<E>, реализуют также

интерфейс Iterable<E>.

4) применяются интерфейсы:

Comparator<T>, Comparable<T>;

Iterator<E>, ListIterator<E>, Map.Entry<K, V>

«Литералы коллекций»

Immutable List, Set, Map

Использует статические фабричные методы

List imList = List.of();

List immutableList = List.of("1","2","3");

Map immutableMap = Map.of(1, "one", 2, "two", 3, "three")

Java 9

Функциональные интерфейсы

java.util.function

интерфейс с одним абстрактным методом М.б. преобразован в Л-выражение

BiFunction<String, String, Integer> compareFunc = (firstStr, secondStr) ->

Integer.compare(firstStr.length(), secondStr.length());

Converter<String, Integer> converter = Integer::valueOf;

@FunctionalInterface interface SomeI{

void funcMethodInterface ();

}

Могут иметь методы по умолчанию или статические методы

Компилятор проверяет, что аннотированная сущность представляет собой интерфейс с одним абстрактным методом

Javadoc включает в себя утверждение, что ваш интерфейс является функциональным интерфейсом

не обязаны использовать аннотацию

Любой интерфейс с одним абстрактным

методом является, по определению, функциональным интерфейсом.

Встроенные функциональные

интерфейсы

Предикаты

Predicate<Boolean> nonNull = Objects::nonNull; Predicate<Boolean> isNull = Objects::isNull;

принимают один аргумент, и

Функции возвращающие значение типа boolean

Function<String, Integer> toInteger = Integer::valueOf;

принимают один аргумент и возвращают

некоторый результат

Поставщики (suppliers) предоставляют результат заданного типа

Supplier<Person> personSupplier = Person::new;

Компараторы

Comparator<Person> comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName);

public static void listCheck(List<Integer> list, Predicate<Integer> predicate) {

for(Integer n: list) {

if(predicate.test(n)) {

//...

}

}

listCheck(list, n-> n > 3 );

Опциональные значения

 

 

не являются функциональными

java.util.Optional<T>

 

 

интерфейсами

 

 

 

 

 

 

решение NullPointerException

 

 

 

контейнер: может содержать значение или некоторый тип Т или просто бытьnull

для моделирования потенциально отсутствующего значения без использования нулевой ссылки.

Имеетразличные методы, чтобы облегчить код для обработки значений как «доступных» или «недоступных» вместо проверки

нулевых значений

Соседние файлы в папке Лекции