diff --git a/core-java-modules/core-java-collections-maps-7/README.md b/core-java-modules/core-java-collections-maps-7/README.md
new file mode 100644
index 0000000000..c63f3b360b
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/README.md
@@ -0,0 +1 @@
+## Relevant Articles
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps-7/pom.xml b/core-java-modules/core-java-collections-maps-7/pom.xml
new file mode 100644
index 0000000000..bb7c6e9fb5
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/pom.xml
@@ -0,0 +1,78 @@
+
+
+ 4.0.0
+ core-java-collections-maps-7
+ core-java-collections-maps-7
+ jar
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+ 5.2.5.RELEASE
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.4
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.36
+
+
+ com.google.code.gson
+ gson
+ 2.8.9
+
+
+ org.json
+ json
+ 20230227
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoString.java b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoString.java
new file mode 100644
index 0000000000..2b3d6db89c
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoString.java
@@ -0,0 +1,60 @@
+package com.baeldung.map;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ConvertHashMapStringToHashMapObjectUsingtoString {
+ public String name;
+ public int age;
+
+ public ConvertHashMapStringToHashMapObjectUsingtoString(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public static ConvertHashMapStringToHashMapObjectUsingtoString deserializeCustomObject(String valueString) {
+ if (valueString.startsWith("{") && valueString.endsWith("}")) {
+ valueString = valueString.substring(1, valueString.length() - 1);
+ String[] parts = valueString.split(",");
+ String name = null;
+ int age = -1;
+ for (String part : parts) {
+ String[] keyValue = part.split("=");
+ if (keyValue.length == 2) {
+ String key = keyValue[0].trim();
+ String val = keyValue[1].trim();
+ if (key.equals("name")) {
+ name = val;
+ } else if (key.equals("age")) {
+ age = Integer.parseInt(val);
+ }
+ }
+ }
+ if (name != null && age >= 0) {
+ return new ConvertHashMapStringToHashMapObjectUsingtoString(name, age);
+ }
+ }
+ return new ConvertHashMapStringToHashMapObjectUsingtoString("", -1);
+ }
+
+ public static void main(String[] args) {
+ String hashMapString = "{key1={name=John, age=30}, key2={name=Alice, age=25}}";
+ String keyValuePairs = hashMapString.replaceAll("[{}\\s]", "");
+ String[] pairs = keyValuePairs.split(",");
+ Map actualHashMap = new HashMap<>();
+ for (String pair : pairs) {
+ String[] keyValue = pair.split("=");
+ if (keyValue.length == 2) {
+ String key = keyValue[0];
+ ConvertHashMapStringToHashMapObjectUsingtoString value = deserializeCustomObject(keyValue[1]);
+ actualHashMap.put(key, value);
+ }
+ }
+ System.out.println(actualHashMap);
+ }
+
+ @Override
+ public String toString() {
+ return "{name=" + name + ", age=" + age + "}";
+ }
+}
diff --git a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoStringUnitTest.java b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoStringUnitTest.java
new file mode 100644
index 0000000000..7d31402131
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/ConvertHashMapStringToHashMapObjectUsingtoStringUnitTest.java
@@ -0,0 +1,31 @@
+package com.baeldung.map;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ConvertHashMapStringToHashMapObjectUsingtoStringUnitTest {
+
+ @Test
+ void givenValidCustomObject_whenSerializing_thenSerializedStringIsCorrect() {
+ ConvertHashMapStringToHashMapObjectUsingtoString customObject = new ConvertHashMapStringToHashMapObjectUsingtoString("John", 30);
+ String expectedSerializedString = "{name=John, age=30}";
+ assertEquals(expectedSerializedString, customObject.toString());
+ }
+
+ @Test
+ void givenValidSerializedString_whenDeserializing_thenCustomObjectIsCorrect() {
+ String serializedString = "{name=Alice, age=25}";
+ ConvertHashMapStringToHashMapObjectUsingtoString customObject = ConvertHashMapStringToHashMapObjectUsingtoString.deserializeCustomObject(serializedString);
+ assertEquals("Alice", customObject.name);
+ assertEquals(25, customObject.age);
+ }
+
+ @Test
+ void givenInvalidSerializedString_whenDeserializing_thenDefaultCustomObjectIsCreated() {
+ String invalidSerializedString = "{invalidString}";
+ ConvertHashMapStringToHashMapObjectUsingtoString customObject = ConvertHashMapStringToHashMapObjectUsingtoString.deserializeCustomObject(invalidSerializedString);
+ assertEquals("", customObject.name);
+ assertEquals(-1, customObject.age);
+ }
+}