Методы по умолчанию и обратные вызовы Lambda Supplier - PullRequest
0 голосов
/ 09 октября 2018

Я приветствую методы в 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 решала бы ненужное выполнение кода - не только Карты, как показано в этом примере.

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

Спасибо за ваши общие знания: -)

1 Ответ

0 голосов
/ 09 октября 2018

То, что вы ищете, существует с Java 8. Взгляните на javadoc HashMap и, в частности, метод Hashmap.computeIfAbsent .Этот метод позволяет добавлять новые записи в HashMap, если ни один не может быть найден с использованием предоставленного ключа.

Пример:

Map<Integer, String> map = new HashMap();
String created = map.computeIfAbsent(1, k -> "Test");
System.out.println(created);

Приведенный выше код вызовет HashMap для вызова предоставленной функции для добавления новой записи, поскольку она не может найти существующую.Он возвращает новую запись и вызывает метод Hashmap.put, чтобы добавить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...