- Преобразование карты в строку в Java
- 1. Обзор
- 2. Пример базовой карты
- 3. Преобразуйте карту в строку путем итерации
- 4. Преобразуйте карту в строку с помощью потоков Java
- 5. Преобразуйте карту в строку с помощью Guava
- 7. Преобразуйте строку в карту с помощью потоков
- 9. Заключение
- Читайте ещё по теме:
- Java Utililty Methods String to Map
- Method
- Convert Stream Element to Map in Java
- Stream of Strings to Map in Java
- Create Map From the Objects of Stream in Java
- Determine Values Length While Converting Stream to Map in Java
- Convert Stream to Map for Unique Product Keys in Java
Преобразование карты в строку в Java
Узнайте, как преобразовать карту в строку и наоборот, используя как основные методы Java, так и сторонние библиотеки.
1. Обзор
В этом уроке мы сосредоточимся на преобразовании из Map в String и наоборот.
Во-первых, мы посмотрим, как достичь этого с помощью основных методов Java, а затем мы будем использовать некоторые сторонние библиотеки.
2. Пример базовой карты
Во всех примерах мы будем использовать одну и ту же реализацию Map :
MapwordsByKey = new HashMap<>(); wordsByKey.put(1, "one"); wordsByKey.put(2, "two"); wordsByKey.put(3, "three"); wordsByKey.put(4, "four");
3. Преобразуйте карту в строку путем итерации
Давайте переберем все ключи в нашей карте и для каждого из них добавим комбинацию ключ-значение к нашему результирующему объекту StringBuilder |.
Для целей форматирования мы можем заключить результат в фигурные скобки:
public String convertWithIteration(Mapmap) < StringBuilder mapAsString = new StringBuilder("<"); for (Integer key : map.keySet()) < mapAsString.append(key + "=" + map.get(key) + ", "); >mapAsString.delete(mapAsString.length()-2, mapAsString.length()).append(">"); return mapAsString.toString(); >
Чтобы проверить, правильно ли мы преобразовали нашу карту , давайте проведем следующий тест:
@Test public void givenMap_WhenUsingIteration_ThenResultingStringIsCorrect() < String mapAsString = MapToString.convertWithIteration(wordsByKey); Assert.assertEquals("", mapAsString); >
4. Преобразуйте карту в строку с помощью потоков Java
Чтобы выполнить преобразование с помощью потоков, нам сначала нужно создать поток из доступных ключей Map .
Во-вторых, мы сопоставляем каждый ключ с читаемой человеком строкой .
Наконец, мы объединяем эти значения и для удобства добавляем некоторые правила форматирования с помощью метода Collectors.joining() :
public String convertWithStream(Mapmap) < String mapAsString = map.keySet().stream() .map(key ->key + "=" + map.get(key)) .collect(Collectors.joining(", ", "")); return mapAsString; >
5. Преобразуйте карту в строку с помощью Guava
Давайте добавим Guava в наш проект и посмотрим, как мы можем добиться преобразования в одной строке кода:
com.google.guava guava 27.0.1-jre
Чтобы выполнить преобразование с помощью класса Joiner Guava, нам нужно определить разделитель между различными записями Map и разделитель между ключами и значениями:
public String convertWithGuava(Map map) < return Joiner.on(",").withKeyValueSeparator(" https://search.maven.org/search?q=a:commons-collections4%20AND%20g:org.apache.commons" rel="noopener noreferrer" target="_blank">Apache Commons , давайте сначала добавим следующую зависимость:">org.apache.commons commons-collections4 4.2 Соединение очень простое – нам просто нужно вызвать StringUtils.метод join :
public String convertWithApache(Map map)
Одно особое упоминание относится к методу debug Print , доступному в Apache Commons. Это очень полезно для целей отладки.
MapUtils.debugPrint(System.out, "Map as String", wordsByKey);Отладочный текст будет записан на консоль:
Map as String = < 1 = one java.lang.String 2 = two java.lang.String 3 = three java.lang.String 4 = four java.lang.String >java.util.HashMap7. Преобразуйте строку в карту с помощью потоков
Чтобы выполнить преобразование из String в Map , давайте определим, где нужно разделить и как извлечь ключи и значения:
public Map convertWithStream(String mapAsString) < Mapmap = Arrays.stream(mapAsString.split(",")) .map(entry -> entry.split(" wp-block-codemirror-blocks-code-block code-block">">public Map convertWithGuava(String mapAsString)9. Заключение
В этом уроке мы рассмотрели, как преобразовать Map в String и наоборот, используя как основные методы Java, так и сторонние библиотеки.
Реализацию всех этих примеров можно найти на GitHub .
Читайте ещё по теме:
Java Utililty Methods String to Map
Method
MapCharacter, Integer> ret = new HashMapCharacter, Integer>(); for (int i = 0; i < s.length(); i++) < ret.put(s.charAt(i), i); return ret;if (s == null) return null; final MapString, String> m = new HashMapString, String>(); final StringBuilder sb = new StringBuilder(); int equalSignIdx = -1; int ampersandCount = 0; for (char c : s.toCharArray()) < if (c != '&' && ampersandCount > 0) < .final MapString, String> map = new HashMapString, String>(); final String[] elements = s.split(";"); for (final String parts : elements) < final String[] keyValue = parts.split(":"); map.put(keyValue[0], keyValue[1]); return map;if (append.isEmpty()) < return new HashMap<>(); HashMap errs = new HashMap<>(); String[] at = append.split(", "); for (String string : at) < String[] at2 = string.split(":"); ArrayListString> atd = new ArrayList<>(); .String[] fieldsArray = source.split(delimiter); MapString, String> fields = new HashMap(); if (fieldsArray.length == 4) < fields.put("accessKey", fieldsArray[0]); fields.put("digest", fieldsArray[1]); fields.put("date", fieldsArray[2]); fields.put("nonce", fieldsArray[3]); > else < .HashMapString, String> dest = new HashMapString, String>(); if (src == null) < return (dest); String line, key, val; int equalsPos, newLinePos, startPos = 0, len = src.length(); while (startPos < len) < newLinePos = src.indexOf('\n', startPos); .MapString, String> ret = new HashMapString, String>(); String[] params = src.split(";"); for (String param : params) < int ei = param.indexOf(" \\n", " "; if (index >= 0) < name = col.substring(0, index).trim(); value = col.substring(index + 1).trim(); res.put(name, value); return res;if (value == null || value.length() == 0) throw new Exception(); if (value.startsWith(") || value.startsWith("[")) value = value.substring(1); if (value.endsWith(">") || value.endsWith("]")) value = value.substring(0, value.length() - 1); String[] elements = value.split(","); MapString, String> map = new HashMap(); .Convert Stream Element to Map in Java
- Stream of Strings to Map in Java
- Create Map From the Objects of Stream in Java
- Determine Values Length While Converting Stream to Map in Java
- Convert Stream to Map for Unique Product Keys in Java
We will go over the practical uses of Java Streams and how to convert stream elements into map elements.
To understand this article, you must have a basic understanding of Java 8, particularly lambda expressions and the Stream API. But, if you are a newbie, do not worry; we will explain everything.
Stream of Strings to Map in Java
- Collectors.toMap() - It performs different functional reduction operations, such as collecting elements into collections.
- toMap - It returns a Collector that gathers elements into a Map with keys and values.
MapString, String> GMS = stream.collect(Collectors.toMap(k->k[0],k-> k[1]));
Got it? We will specify appropriate mapping functions to define how to retrieve keys and values from stream elements.
Implementation of Example1.java :
package delftstackStreamToMapJava; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; public class Example1 // Method to get stream of `String[]` private static StreamString[]> MapStringsStream() return Stream.of(new String[][] "Sky", "Earth">, "Fire", "Water">, "White", "Black">, "Ocean", "Deep">, "Life", "Death">, "Love", "Fear"> >); > // Program to convert the stream to a map in Java 8 and above public static void main(String[] args) // get a stream of `String[]` StreamString[]> stream = MapStringsStream(); // construct a new map from the stream MapString, String> GMS = stream.collect(Collectors.toMap(k->k[0],k-> k[1])); System.out.println(GMS); > >
Create Map From the Objects of Stream in Java
This program is another simple demonstration of using the Collectors.toMap() method.
Besides, it also uses references function/lambda expression. So, we recommend you check it for a few minutes.
Check out our three streams:
ListDouble> L1 = Arrays.asList(1.1,2.3); ListString> L2 = Arrays.asList("A","B","C"); ListInteger> L3 = Arrays.asList(10,20,30);
We defined three array lists as streams with different data types in each.
To add more to our primary mapping method:
2.1 It takes a key and value mapper to generate a Map from Stream objects.
2.2 Stream , in this case, is our array lists, which are then passed to Collectors for reduction while getting mapped in keys with the help of .toMap .MapDouble, Object> printL1 = L1.stream() .collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1)); System.out.println("Stream of Double to Map: " + printL1);
Implementation of Example2.java :
package delftstackStreamToMapJava; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Example2 public static void main(String[] args) // Stream of Integers ListDouble> L1 = Arrays.asList(1.1, 2.3); ListString> L2 = Arrays.asList("A", "B", "C"); ListInteger> L3 = Arrays.asList(10, 20, 30); MapDouble, Object> printL1 = L1.stream() .collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1)); System.out.println("Stream of Double to Map: " + printL1); MapString, Object> printL2 = L2.stream() .collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1)); System.out.println("Stream of String to Map: " + printL2); MapInteger, Object> printL3 = L3.stream() .collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1)); System.out.println("Stream of Integers to Map: " + printL3); > >
Stream of Double to Map: Stream of String to Map: Stream of Integers to Map:
Determine Values Length While Converting Stream to Map in Java
The following code block converts a string into a Map , with the keys representing the string value and the value indicating the length of each word. This is our final example, although this one falls into the category of an elementary stream to map elementary examples.
- stream-> stream - determines the Stream value and returns it as the map’s key.
- stream-> stream.length - finds the present stream value, finds its length and returns it to the map for the given key.
Implementation of Example3.java :
package delftstackStreamToMapJava; import java.util.Arrays; import java.util.Map; import java.util.stream.Collectors; public class Example3 public static MapString, Integer> toMap(String str) MapString, Integer> elementL = Arrays.stream(str.split("/")) .collect(Collectors.toMap(stream -> stream, stream -> stream.length())); return elementL; > public static void main(String[] args) String stream = "We/Will/Convert/Stream/Elements/To/Map"; System.out.println(toMap(stream)); > >
Convert Stream to Map for Unique Product Keys in Java
We will convert a stream of integer pro_id and string’s productname . Not to get confused, though!
This is yet another implementation of a collection of streams to map values.
It is sequential, and the keys here are unique pro_id . The whole program is the same as an example two except for its concept.
This is the somewhat more realistic situation of using streams to map. It will also enable your understanding of how many ways you can construct a customized program that extracts unique values and keys from array objects.
Implementation of Products.java :
package delftstackStreamToMapJava; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Products private Integer pro_id; private String productname; public Products(Integer pro_id, String productname) this.pro_id = pro_id; this.productname = productname; > public Integer extractpro_id() return pro_id; > public String getproductname() return productname; > public String toString() return "[productid = " + this.extractpro_id() + ", productname = " + this.getproductname() + "]"; > public static void main(String args[]) ListProducts> listofproducts = Arrays.asList(new Products(1, "Lamda 2.0 "), new Products(2, "Gerrio 3A ultra"), new Products(3, "Maxia Pro"), new Products(4, "Lemna A32"), new Products(5, "Xoxo Pro")); MapInteger, Products> map = listofproducts.stream() .collect(Collectors.toMap(Products::extractpro_id, Function.identity())); map.forEach((key, value) -> System.out.println(value); >); > >
[productid = 1, productname = Lamda 2.0 ] [productid = 2, productname = Gerrio 3A ultra] [productid = 3, productname = Maxia Pro] [productid = 4, productname = Lemna A32] [productid = 5, productname = Xoxo Pro]