diff --git a/guava-collections-set/.gitignore b/guava-collections-set/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/guava-collections-set/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/guava-collections-set/pom.xml b/guava-collections-set/pom.xml
new file mode 100644
index 0000000000..46dcae492d
--- /dev/null
+++ b/guava-collections-set/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+ com.baeldung
+ guava-collections-set
+ 0.1.0-SNAPSHOT
+ guava-collections-set
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ guava-collections-set
+
+
+
+
+ 27.1-jre
+
+ 3.6.1
+
+
+
diff --git a/guava-collections-set/src/test/java/org/baeldung/guava/GuavaMultiSetUnitTest.java b/guava-collections-set/src/test/java/org/baeldung/guava/GuavaMultiSetUnitTest.java
new file mode 100644
index 0000000000..e74db29881
--- /dev/null
+++ b/guava-collections-set/src/test/java/org/baeldung/guava/GuavaMultiSetUnitTest.java
@@ -0,0 +1,92 @@
+package org.baeldung.guava;
+
+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Multiset;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class GuavaMultiSetUnitTest {
+
+ @Test
+ public void givenMultiSet_whenAddingValues_shouldReturnCorrectCount() {
+ Multiset bookStore = HashMultiset.create();
+ bookStore.add("Potter");
+ bookStore.add("Potter");
+ bookStore.add("Potter");
+
+ assertThat(bookStore.contains("Potter")).isTrue();
+ assertThat(bookStore.count("Potter")).isEqualTo(3);
+ }
+
+ @Test
+ public void givenMultiSet_whenRemovingValues_shouldReturnCorrectCount() {
+ Multiset bookStore = HashMultiset.create();
+ bookStore.add("Potter");
+ bookStore.add("Potter");
+
+ bookStore.remove("Potter");
+ assertThat(bookStore.contains("Potter")).isTrue();
+ assertThat(bookStore.count("Potter")).isEqualTo(1);
+ }
+
+ @Test
+ public void givenMultiSet_whenSetCount_shouldReturnCorrectCount() {
+ Multiset bookStore = HashMultiset.create();
+ bookStore.setCount("Potter", 50);
+ assertThat(bookStore.count("Potter")).isEqualTo(50);
+ }
+
+ @Test
+ public void givenMultiSet_whenSettingNegativeCount_shouldThrowException() {
+ Multiset bookStore = HashMultiset.create();
+ assertThatThrownBy(() -> bookStore.setCount("Potter", -1))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void givenMultiSet_whenSettingCountWithEmptySet_shouldBeSuccessful() {
+ Multiset bookStore = HashMultiset.create();
+ assertThat(bookStore.setCount("Potter", 0, 2)).isTrue();
+ }
+
+ @Test
+ public void givenMultiSet_whenSettingCountWithCorrectValue_shouldBeSuccessful() {
+ Multiset bookStore = HashMultiset.create();
+ bookStore.add("Potter");
+ bookStore.add("Potter");
+
+ assertThat(bookStore.setCount("Potter", 2, 52)).isTrue();
+ }
+
+ @Test
+ public void givenMultiSet_whenSettingCountWithIncorrectValue_shouldFail() {
+ Multiset bookStore = HashMultiset.create();
+ bookStore.add("Potter");
+ bookStore.add("Potter");
+
+ assertThat(bookStore.setCount("Potter", 5, 52)).isFalse();
+ }
+
+ @Test
+ public void givenMap_compareMultiSetOperations() {
+ Map bookStore = new HashMap<>();
+ bookStore.put("Potter", 3);
+
+ assertThat(bookStore.containsKey("Potter")).isTrue();
+ assertThat(bookStore.get("Potter")).isEqualTo(3);
+
+ bookStore.put("Potter", 2);
+ assertThat(bookStore.get("Potter")).isEqualTo(2);
+
+ bookStore.put("Potter", null);
+ assertThat(bookStore.containsKey("Potter")).isTrue();
+
+ bookStore.put("Potter", -1);
+ assertThat(bookStore.containsKey("Potter")).isTrue();
+ }
+}
\ No newline at end of file