Метод сборщиков toMap () в Java с примерами
Метод 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); } } |
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); } } |
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); } } |
Map:{GFG=GeeksForGeeks, Geeks, g=geeks}
Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .