diff --git a/core-java-modules/core-java-collections-list-6/pom.xml b/core-java-modules/core-java-collections-list-6/pom.xml
index 46ef4ff4c9..18a153ff06 100644
--- a/core-java-modules/core-java-collections-list-6/pom.xml
+++ b/core-java-modules/core-java-collections-list-6/pom.xml
@@ -13,4 +13,20 @@
0.0.1-SNAPSHOT
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+
+
+ 0.10.4
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-list-6/src/main/java/com/baeldung/sorting/SortingBasedOnAnotherList.java b/core-java-modules/core-java-collections-list-6/src/main/java/com/baeldung/sorting/SortingBasedOnAnotherList.java
new file mode 100644
index 0000000000..b53b3a946a
--- /dev/null
+++ b/core-java-modules/core-java-collections-list-6/src/main/java/com/baeldung/sorting/SortingBasedOnAnotherList.java
@@ -0,0 +1,52 @@
+package com.baeldung.sorting;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.google.common.collect.Ordering;
+
+public class SortingBasedOnAnotherList {
+ static List sortUsingForLoop(List listToSort, List listWithOrder) {
+ List sortedList = new ArrayList<>();
+ for(String element: listWithOrder) {
+ if(listToSort.contains(element)) {
+ sortedList.add(element);
+ }
+ }
+ return sortedList;
+ }
+
+ static void sortUsingComparator(List listToSort, List listWithOrder) {
+ listToSort.sort(Comparator.comparingInt(listWithOrder::indexOf));
+ }
+
+ static void sortUsingStreamAPI(List listToSort, List listWithOrder) {
+ Map indicesMap = listWithOrder.stream().collect(Collectors.toMap(e->e, listWithOrder::indexOf));
+ listToSort.sort(Comparator.comparingInt(indicesMap::get));
+ }
+
+ static void sortUsingMap(List listToSort, List listWithOrder) {
+ Map orderedIndicesMap = new HashMap<>();
+ for(int i = 0; i < listWithOrder.size(); i++) {
+ orderedIndicesMap.put(listWithOrder.get(i), i);
+ }
+ listToSort.sort(Comparator.comparingInt(orderedIndicesMap::get));
+ }
+
+ static List sortUsingGuava(List listToSort, List listWithOrder) {
+ Ordering explicitOrdering = Ordering.explicit(listWithOrder);
+ List sortedList = explicitOrdering.sortedCopy(listToSort);
+ return sortedList;
+ }
+
+ static List sortUsingVavr(List listToSort, List listWithOrder) {
+ io.vavr.collection.List listWithOrderedElements = io.vavr.collection.List.ofAll(listWithOrder);
+ io.vavr.collection.List listToSortElements = io.vavr.collection.List.ofAll(listToSort);
+ io.vavr.collection.List sortedList = listToSortElements.sortBy(listWithOrderedElements::indexOf);
+ return sortedList.asJava();
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-list-6/src/test/java/com/baeldung/sorting/SortingBasedOnAnotherListUnitTest.java b/core-java-modules/core-java-collections-list-6/src/test/java/com/baeldung/sorting/SortingBasedOnAnotherListUnitTest.java
new file mode 100644
index 0000000000..2ed7d52eee
--- /dev/null
+++ b/core-java-modules/core-java-collections-list-6/src/test/java/com/baeldung/sorting/SortingBasedOnAnotherListUnitTest.java
@@ -0,0 +1,70 @@
+package com.baeldung.sorting;
+
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingComparator;
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingForLoop;
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingGuava;
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingMap;
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingStreamAPI;
+import static com.baeldung.sorting.SortingBasedOnAnotherList.sortUsingVavr;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+public class SortingBasedOnAnotherListUnitTest {
+ @Test
+ public void givenTwoList_whenUsingForLoop_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingForLoop(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listWithOrder);
+ }
+
+ @Test
+ public void givenTwoList_whenUsingComparator_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingComparator(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listToSort);
+ }
+
+ @Test
+ public void givenTwoList_whenUsingStreamAPI_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingStreamAPI(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listToSort);
+ }
+
+ @Test
+ public void givenTwoList_whenUsingMap_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingMap(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listToSort);
+ }
+
+ @Test
+ public void givenTwoList_whenUsingGuavaExplicit_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingGuava(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listWithOrder);
+ }
+
+ @Test
+ public void givenTwoList_whenUsingVavr_thenSort() {
+ List listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ List listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
+ sortUsingVavr(listToSort, listWithOrder);
+ List expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
+ assertEquals(expectedSortedList, listWithOrder);
+ }
+}
\ No newline at end of file