Finding All Duplicates in a List in Java- BAEL-6075 (#13291)

* Deep & Shallow Copy

* Revert "Deep & Shallow Copy"

This reverts commit 62f75b002a21feb90c0b6be02072356b64284283.

* duplicates in a list in java

* Unit test changes

* unit test changes

* Tests change after review

* Code formatted

* code formatted

* new module core-java-lang-6

* entry in parent pom and test setup method name change

* module renamed

* parent pom entry added

* pom.xml changes reverted
This commit is contained in:
2406ankita 2023-02-22 18:36:23 +05:30 committed by GitHub
parent f4d680a8d8
commit 14ce0136bd
2 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,69 @@
package com.baeldung.listduplicate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
public class ListDuplicate {
public List<Integer> listDuplicateUsingSet(List<Integer> list) {
List<Integer> duplicates = new ArrayList<>();
Set<Integer> set = new HashSet<>();
for (Integer i : list) {
if (set.contains(i)) {
duplicates.add(i);
} else {
set.add(i);
}
}
return duplicates;
}
public List<Integer> listDuplicateUsingMap(List<Integer> list) {
List<Integer> duplicates = new ArrayList<>();
Map<Integer, Integer> frequencyMap = new HashMap<>();
for (Integer number : list) {
frequencyMap.put(number, frequencyMap.getOrDefault(number, 0) + 1);
}
for (int number : frequencyMap.keySet()) {
if (frequencyMap.get(number) != 1) {
duplicates.add(number);
}
}
return duplicates;
}
public List<Integer> listDuplicateUsingFilterAndSetAdd(List<Integer> list) {
Set<Integer> elements = new HashSet<Integer>();
return list.stream()
.filter(n -> !elements.add(n))
.collect(Collectors.toList());
}
public List<Integer> listDuplicateUsingCollectionsFrequency(List<Integer> list) {
List<Integer> duplicates = new ArrayList<>();
Set<Integer> set = list.stream()
.filter(i -> Collections.frequency(list, i) > 1)
.collect(Collectors.toSet());
duplicates.addAll(set);
return duplicates;
}
public List<Integer> listDuplicateUsingMapAndCollectorsGroupingBy(List<Integer> list) {
List<Integer> duplicates = new ArrayList<>();
Set<Integer> set = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.filter(m -> m.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
duplicates.addAll(set);
return duplicates;
}
}

View File

@ -0,0 +1,68 @@
package com.baeldung.listduplicate;
import java.util.Arrays;
import java.util.List;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class ListDuplicateUnitTest {
private static ListDuplicate listDuplicate;
@BeforeClass
public static void setup() {
listDuplicate = new ListDuplicate();
}
@Test
public void givenList_whenUsingSet_thenReturnDuplicateElements() {
List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4, 5);
List<Integer> duplicates = listDuplicate.listDuplicateUsingSet(list);
Assert.assertEquals(duplicates.size(), 2);
Assert.assertEquals(duplicates.contains(3), true);
Assert.assertEquals(duplicates.contains(4), true);
Assert.assertEquals(duplicates.contains(1), false);
}
@Test
public void givenList_whenUsingFrequencyMap_thenReturnDuplicateElements() {
List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4, 5);
List<Integer> duplicates = listDuplicate.listDuplicateUsingMap(list);
Assert.assertEquals(duplicates.size(), 2);
Assert.assertEquals(duplicates.contains(3), true);
Assert.assertEquals(duplicates.contains(4), true);
Assert.assertEquals(duplicates.contains(1), false);
}
@Test
public void givenList_whenUsingFilterAndSetAdd_thenReturnDuplicateElements() {
List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4, 5);
List<Integer> duplicates = listDuplicate.listDuplicateUsingFilterAndSetAdd(list);
Assert.assertEquals(duplicates.size(), 2);
Assert.assertEquals(duplicates.contains(3), true);
Assert.assertEquals(duplicates.contains(4), true);
Assert.assertEquals(duplicates.contains(1), false);
}
@Test
public void givenList_whenUsingCollectionsFrequency_thenReturnDuplicateElements() {
List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4, 5);
List<Integer> duplicates = listDuplicate.listDuplicateUsingCollectionsFrequency(list);
Assert.assertEquals(duplicates.size(), 2);
Assert.assertEquals(duplicates.contains(3), true);
Assert.assertEquals(duplicates.contains(4), true);
Assert.assertEquals(duplicates.contains(1), false);
}
@Test
public void givenList_whenUsingMapAndCollectorsGroupingBy_thenReturnDuplicateElements() {
List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4, 5);
List<Integer> duplicates = listDuplicate.listDuplicateUsingCollectionsFrequency(list);
Assert.assertEquals(duplicates.size(), 2);
Assert.assertEquals(duplicates.contains(3), true);
Assert.assertEquals(duplicates.contains(4), true);
Assert.assertEquals(duplicates.contains(1), false);
}
}