Метод сборщиков toMap () в Java с примерами

Опубликовано: 4 Февраля, 2022

Метод toMap () - это статический метод класса Collectors, который возвращает Collector, который накапливает элементы в Map, ключи и значения которого являются результатом применения предоставленных функций сопоставления к входным элементам. Обратите внимание, что ключи уникальны, и если в любом случае ключи дублируются, то при выполнении операции сбора возникает исключение IllegalStateException.

Есть 3 перегрузки метода toMap ():

toMap (функция keyMapper, функция valueMapper)

Синтаксис:

общедоступный статический сборщик <T,?, Map>
    toMap (функция keyMapper, функция valueMapper)

куда

  • T : Тип входных элементов.
  • Карта : Выходная карта.
  • Сборщик интерфейса: изменяемая операция сокращения, которая накапливает входные элементы в изменяемый контейнер результата, при необходимости преобразуя накопленный результат в окончательное представление после того, как все входные элементы были обработаны. Операции восстановления могут выполняться как последовательно, так и параллельно.
  • toMap () : статический метод класса Collectors и возвращает Collector, который собирает элементы в карту, ключи и значения которой являются результатом применения функций сопоставления к входным элементам. Класс Collectors находится в пакете java.util.streams.

Параметры: этот метод принимает следующие параметры:

  • keyMapper : функция сопоставления для создания ключей
  • valueMapper : функция отображения для создания значений

Возвращаемое значение: этот метод возвращает Collector, который собирает элементы в карту, ключи и значения которой являются результатом применения функций сопоставления к входным элементам.

Below example illustrates the above method:

// Java program to demonstrate
// toMap() method with unique keys
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a String with no repeated keys
        Stream<String[]>
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "G", "Geeks" } });
  
        // Convert the String to Map
        // using toMap() method
        Map<String, String>
            map = str.collect(
                Collectors.toMap(p -> p[0], p -> p[1]));
  
        // Print the returned Map
        System.out.println("Map:" + map);
    }
}
Output:
Map:{G=Geeks, g=geeks, GFG=GeeksForGeeks}

toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction)

Это перегрузка метода toMap (), в котором к ключу и значениям добавляется дополнительный параметр, и это функция слияния . Задача функции - объединить значения, имеющие один и тот же ключ, способом, определенным кодировщиком. Этот перегруженный метод рекомендуется только в том случае, если есть одинаковые ключи для нескольких значений. Ниже приводится простой пример.

Синтаксис:

общедоступный статический сборщик <T,?, Map> 
    toMap (Функция keyMapper, 
          Функция valueMapper, 
          BinaryOperator <U> mergeFunction)

куда

  • T : Тип входных элементов.
  • Карта : Выходная карта.
  • Сборщик интерфейса: изменяемая операция сокращения, которая накапливает входные элементы в изменяемый контейнер результата, при необходимости преобразуя накопленный результат в окончательное представление после того, как все входные элементы были обработаны. Операции восстановления могут выполняться как последовательно, так и параллельно.
  • toMap () : статический метод класса Collectors и возвращает Collector, который собирает элементы в карту, ключи и значения которой являются результатом применения функций сопоставления к входным элементам. Класс Collectors находится в пакете java.util.streams.

Параметры: этот метод принимает следующие параметры:

  • keyMapper : функция сопоставления для создания ключей
  • valueMapper : функция отображения для создания значений
  • mergeFunction : функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним и тем же ключом, как указано в Map.merge (Object, Object, BiFunction)

Возвращаемое значение: этот метод возвращает Collector, который собирает элементы в карту, ключи которой являются результатом применения функции сопоставления клавиш к элементам ввода, а значения являются результатом применения функции сопоставления значений ко всем элементам ввода, равным ключу. и объединяя их с помощью функции слияния

Below example illustrates the above method:

// Java program to demonstrate
// toMap() method without unique keys
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a String with repeated keys
        Stream<String[]>
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "geeksforgeeks" } });
  
        // Get Map from String
        // using toMap() method
        Map<String, String>
            map = str
                      .collect(Collectors
                                   .toMap(p -> p[0], p -> p[1], (s, a) -> s + ", " + a));
  
        // Print the Map
        System.out.println("Map:" + map);
    }
}
Output:
Map:{g=geeks, GFG=GeeksForGeeks, geeksforgeeks}

toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction, Supplier mapSupplier)

Это перегруженный метод toMap () с дополнительным параметром .ie Suppliers. Здесь нам нужно передать поставщика. Поставщик - это интерфейс класса java.util.Function. Это функциональный интерфейс, поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод. Если мы хотим вернуть LinkedHashMap, нам нужно передать поставщик как LinkedHashMap :: new. В следующем примере мы будем делать то же самое.

Синтаксис:

public static <T, K, U, M extends Map> Collector 
    toMap (Функция keyMapper,
          Функция valueMapper,
          BinaryOperator <U> mergeFunction,
          Карта поставщика Поставщик)

куда

  • T : Тип входных элементов.
  • Карта : Выходная карта.
  • Сборщик интерфейса: изменяемая операция сокращения, которая накапливает входные элементы в изменяемый контейнер результата, при необходимости преобразуя накопленный результат в окончательное представление после того, как все входные элементы были обработаны. Операции восстановления могут выполняться как последовательно, так и параллельно.
  • toMap () : статический метод класса Collectors и возвращает Collector, который собирает элементы в карту, ключи и значения которой являются результатом применения функций сопоставления к входным элементам. Класс Collectors находится в пакете java.util.streams.

Параметры: этот метод принимает следующие параметры:

  • keyMapper : функция сопоставления для создания ключей
  • valueMapper : функция отображения для создания значений
  • mergeFunction : функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним и тем же ключом, как указано в Map.merge (Object, Object, BiFunction)
  • mapSupplier : функция, которая возвращает новую пустую карту, в которую будут вставлены результаты.

Возвращаемое значение: этот метод возвращает Collector, который собирает элементы в карту, ключи которой являются результатом применения функции сопоставления клавиш к элементам ввода, а значения являются результатом применения функции сопоставления значений ко всем элементам ввода, равным ключу. и объединяя их с помощью функции слияния

Below example illustrates the above method:

// Java program to demonstrate
// toMap() method
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
  
    public static void main(String[] args)
    {
  
        // Create a String to be converted
        Stream<String[]>
            Ss1 = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "Geeks" } });
  
        // Get Map from String
        // using toMap() method
        LinkedHashMap<String, String>
            map2 = Ss1
                       .collect(Collectors
                                    .toMap(
                                        p -> p[0], p -> p[1], (s, a) -> s + ", " + a, LinkedHashMap::new));
  
        // Print the Map
        System.out.println("Map:" + map2);
    }
}
Output:
Map:{GFG=GeeksForGeeks, Geeks, g=geeks}

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .