Я приветствую методы в API для простого создания инициализаций по умолчанию.Например, в HashMaps.Но почему им не были предоставлены методы лямбда-поставщика?- Или я пропустил важный шаг, или я не изучил последние версии Java API?
Стандартная (Java8) версия:
Map<String,List<Integer>> datas = new HashMap<>();
List<Integer> integersList = datas.getOrDefault( "somekey", new ArrayList<>() );
, которая создала бы новый ArrayList в любое время кодавыполняется - независимо от того, нужен новый список или нет.
Требуемая версия поставщика Lambda:
Map<String,List<Integer>> datas = new HashMap<>();
List<Integer> integersList = datas.getOrDefault( "somekey", ()->new ArrayList() );
Создал бы экземпляр (или выполнил какой-то код создания экземпляра) только в том случае, если требуемый ключ не нуженвнутри карты.
Код getOrDefault () -Метода может выглядеть примерно так:
public V getOrDefault( K key, Supplier<V> supplier ) {
if ( !super.containsKey( key ) && supplier != null ) {
super.put( key, supplier.get() );
}
return super.get( key );
}
Почему они (?) не создали его так, чтобыПервоначально или добавили такую функциональность позже?
Полагаю, есть еще больше примеров, когда Lambda решала бы ненужное выполнение кода - не только Карты, как показано в этом примере.
Кстати:извините за повторный вопрос, но я не знаю, как точно искать мой вопрос с другими терминами ... Не стесняйтесь размещать полезные ссылки.
Спасибо за ваши общие знания: -)