Пацей 4 сем / Лекции / СТПI_2_ООП
.pdfКарты отображений
►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
для моделирования потенциально отсутствующего значения без использования нулевой ссылки.
Имеетразличные методы, чтобы облегчить код для обработки значений как «доступных» или «недоступных» вместо проверки
нулевых значений