import java.util.Arrays;
import java.util.OptionalInt;
public class SecondLargestNumber {
public static void main(String[] args) {
int[] numbers = {10, 5, 8, 20, 15, 20, 25}; // Example array
OptionalInt secondLargest = Arrays.stream(numbers)
.distinct() // Remove duplicates
.sorted() // Sort in ascending order
.skip(numbers.length - 2) // Skip to second last element
.findFirst(); // Get second largest
secondLargest.ifPresent(num -> System.out.println("Second Largest: " + num));
}
}
Output:
Second Largest: 20
Using reduce() (Without Sorting)
This approach finds the largest and second largest in one pass, making it more efficient (O(n) time complexity).
import java.util.Arrays;
public class SecondLargestReduce {
public static void main(String[] args) {
int[] numbers = {10, 5, 8, 20, 15, 25};
int max = Arrays.stream(numbers).max().orElse(Integer.MIN_VALUE);
int secondLargest = Arrays.stream(numbers)
.filter(n -> n != max) // Exclude the largest number
.max()
.orElseThrow(() -> new RuntimeException("No second largest number"));
System.out.println("Second Largest: " + secondLargest);
}
}
