Hi Friends,
Second Largest Element in Java 8 Streams | 6 Interview-Ready Approaches
This is frequently asked questions in Interview. I have faced this interview in Persistent, Capgemini and Infosys.
Please find the Youtube link of this program.
|
|
package org.practice.basicprgms;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
import java.util.stream.Collectors;
public class FindSecondLargestNumber {
public static void main(String[] args) {
int[] arr = {10,15,20,25,30};
// Method 1: Using Sorted(0 and Skip() method
int secondLargestNumber =
Arrays.stream(arr)
.boxed()
.sorted(Comparator.reverseOrder())
.skip(1)
.findFirst()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 1: Second Larget Number : "+ secondLargestNumber);
// Method 2: Using Lambda Expression
secondLargestNumber =
Arrays.stream(arr)
.boxed()
.sorted((a,b) -> b - a)
.skip(1)
.findFirst()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 2: Second Larget Number : "+ secondLargestNumber);
// Method 3: Using max() method
int maxNum = Arrays.stream(arr).max().getAsInt();
secondLargestNumber =
Arrays.stream(arr)
.filter(n -> n < maxNum)
.max()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 3: Second Larget Number : "+ secondLargestNumber);
// Method 4: Using TreeSet and Stream
secondLargestNumber =
Arrays.stream(arr)
.boxed()
.collect(Collectors.toCollection(() -> new TreeSet<Integer>(Comparator.reverseOrder())))
.stream()
.skip(1)
.findFirst()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 4: Second Larget Number : "+ secondLargestNumber);
// Method 5: Using Map Collection Object
Map<String, Integer> map = new HashMap<>();
map.put("Ten", 10);
map.put("Twenty", 20);
map.put("Thirty", 30);
map.put("Fourty", 40);
map.put("Fifty", 50);
secondLargestNumber =
map.values().stream()
.sorted(Comparator.reverseOrder())
.skip(1)
.findFirst()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 5: Second Larget Number : "+ secondLargestNumber);
// Method 6 : USing Map
Map.Entry<String, Integer> secondLargestEntry =
map.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.skip(1)
.findFirst()
.orElseThrow(() -> new RuntimeException("Second Largest Number is Not Available"));
System.out.println("Method 6: Second Larget Number : "+ secondLargestEntry.getValue());
}
}
0 Comments