[BAEL-7306] Add methods for sorting a list (#15462)
Co-authored-by: rajatgarg <rajatgarg@adobe.com>
This commit is contained in:
parent
a87d4fbdb3
commit
288178f87b
@ -13,4 +13,20 @@
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>${guava.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.vavr</groupId>
|
||||
<artifactId>vavr</artifactId>
|
||||
<version>${vavr.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<vavr.version>0.10.4</vavr.version>
|
||||
</properties>
|
||||
</project>
|
@ -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<String> sortUsingForLoop(List<String> listToSort, List<String> listWithOrder) {
|
||||
List<String> sortedList = new ArrayList<>();
|
||||
for(String element: listWithOrder) {
|
||||
if(listToSort.contains(element)) {
|
||||
sortedList.add(element);
|
||||
}
|
||||
}
|
||||
return sortedList;
|
||||
}
|
||||
|
||||
static void sortUsingComparator(List<String> listToSort, List<String> listWithOrder) {
|
||||
listToSort.sort(Comparator.comparingInt(listWithOrder::indexOf));
|
||||
}
|
||||
|
||||
static void sortUsingStreamAPI(List<String> listToSort, List<String> listWithOrder) {
|
||||
Map<String,Integer> indicesMap = listWithOrder.stream().collect(Collectors.toMap(e->e, listWithOrder::indexOf));
|
||||
listToSort.sort(Comparator.comparingInt(indicesMap::get));
|
||||
}
|
||||
|
||||
static void sortUsingMap(List<String> listToSort, List<String> listWithOrder) {
|
||||
Map<String, Integer> 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<String> sortUsingGuava(List<String> listToSort, List<String> listWithOrder) {
|
||||
Ordering<String> explicitOrdering = Ordering.explicit(listWithOrder);
|
||||
List<String> sortedList = explicitOrdering.sortedCopy(listToSort);
|
||||
return sortedList;
|
||||
}
|
||||
|
||||
static List<String> sortUsingVavr(List<String> listToSort, List<String> listWithOrder) {
|
||||
io.vavr.collection.List<String> listWithOrderedElements = io.vavr.collection.List.ofAll(listWithOrder);
|
||||
io.vavr.collection.List<String> listToSortElements = io.vavr.collection.List.ofAll(listToSort);
|
||||
io.vavr.collection.List<String> sortedList = listToSortElements.sortBy(listWithOrderedElements::indexOf);
|
||||
return sortedList.asJava();
|
||||
}
|
||||
}
|
@ -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<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingForLoop(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listWithOrder);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoList_whenUsingComparator_thenSort() {
|
||||
List<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingComparator(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listToSort);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoList_whenUsingStreamAPI_thenSort() {
|
||||
List<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingStreamAPI(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listToSort);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoList_whenUsingMap_thenSort() {
|
||||
List<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingMap(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listToSort);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoList_whenUsingGuavaExplicit_thenSort() {
|
||||
List<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingGuava(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listWithOrder);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoList_whenUsingVavr_thenSort() {
|
||||
List<String> listWithOrder = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
List<String> listToSort = Arrays.asList("Pizza", "Burger", "Fries", "Coke");
|
||||
sortUsingVavr(listToSort, listWithOrder);
|
||||
List<String> expectedSortedList = Arrays.asList("Burger", "Coke", "Fries", "Pizza");
|
||||
assertEquals(expectedSortedList, listWithOrder);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user