# Find nth Largest elements from Integer List using Java Stream

To find the nth highest elements from an integer list using Java 8 Stream API, you can follow these steps:

1. Sort the integer list in descending order.
2. Take the first n elements from the sorted list.

## 1. Find Single Element

public static Integer findNthHighestElement(List<Integer> integerList, int n) {

if (integerList.isEmpty() || n <= 0 || integerList.size() < n)

return integerList.stream()
.distinct()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList()).get(n - 1);
}

## 2. Find All Elements

To find all occurrences of the third highest elements in the list, you can modify the code to keep track of the third highest element and then filter all elements that are equal to it.

public static List<Integer> findAllNthHighestElements(List<Integer> integerList, int n) {

if (integerList.isEmpty() || n <= 0 || integerList.size() < n)

Integer highestElement = integerList.stream()
.distinct()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList()).get(n - 1);

return integerList.stream()
.filter(e -> e == highestElement)
.collect(Collectors.toList());
}

Here is the complete example.

FindNthElements.java
package org.websparrow;

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

public class FindNthElements {

public static void main(String[] args) {

List<Integer> integerList = Arrays.asList(10, 20, 5, 15, 30, 25, 20);
int n = 3; // Change n to get the nth highest elements

Integer highestElement = findNthHighestElement(integerList, n);
System.out.println("The " + n + " highest element is: " + highestElement);

List<Integer> allHighestElements = findAllNthHighestElements(integerList, n);
System.out.println("The " + n + " highest elements are: " + allHighestElements);
}

public static Integer findNthHighestElement(List<Integer> integerList, int n) {

if (integerList.isEmpty() || n <= 0 || integerList.size() < n)

return integerList.stream()
.distinct()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList()).get(n - 1);
}

public static List<Integer> findAllNthHighestElements(List<Integer> integerList, int n) {

if (integerList.isEmpty() || n <= 0 || integerList.size() < n)

Integer highestElement = integerList.stream()
.distinct()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList()).get(n - 1);

return integerList.stream()
.filter(e -> e == highestElement)
.collect(Collectors.toList());
}
}

Output:

console
The 3 highest element is: 20
The 3 highest elements are: [20, 20]