## Thursday, 24 August 2023

### Find duplicate elements from the given a list using Java 8 Stream

In this post, we need to have a look one of the important coding interview questions asked for java 8 streams. Given list contains either String or Integers. Refer all coding questions here

1) Print duplicate elements using frequency and toSet methods    .

In the below code used Collections.frequency to filter the data with occurance value greater than 1 and toSet method used to remove the duplicated in output.

```import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Java8StreamEx {

public static void main(String[] args) {

List<Integer> integerList = Arrays.asList(2, 3, 3, 5, 6, 6, 6);

Set<Integer> list = integerList.stream().filter(
s -> Collections.frequency(integerList, s) > 1)```
```                                  .collect(Collectors.toSet());

list.stream().forEach(s -> System.out.println("Duplicate element - "+s));
}
}
```

Output:- Duplicate element - 3
Duplicate element - 6

2) Using frequency and toMap method(map used to store element with occurance)

Used frequency and toMap method to store duplicates into the Map with occurance as a value.

```import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Java8StreamEx {

public static void main(String[] args) {

List<Integer> integerList = Arrays.asList(2, 3, 3, 5, 6, 6, 6);

// store duplicate into the map
Map<Integer, Long> map = ```
```                         integerList.stream().filter(
s -> Collections.frequency(integerList, s) > 1).collect(
Collectors.toMap(Function.identity(), v -> 1L, Long::sum));

map.entrySet().stream().forEach(s -> System.out.println(s));
}
}
```

Output: - 3=2
6=3

3) Using groupingBy and counting methods - group the similar elements and to find the occarance used counting.

To write the code to find the duplicate using groupingBy,

```import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Java8StreamEx {

public static void main(String[] args) {

List<String> listOfString = Arrays.asList("A", "B", "C", "A", "A", "D", "B");

Map<String, Long> mapOfStrings =
listOfString.stream().filter(
s -> Collections.frequency(listOfString, s) > 1)
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));

mapOfStrings.entrySet().stream().forEach(s -> System.out.println(s));
}
}
```

Output:-A=3
B=2