Skip to main content

How to sort collections in Java 8?


Introduction

In this post, we will explore different ways to sort Java collections in a certain order. Java platform provides a Collections framework that represents a group of objects. All the Java classes those implement the Collection interface have by default implemented the sort method i.e.

Collections.sort(list/set/Array)

Java classes like String, Date, Integer, Double, Float, Long, Integer etc implements the Comparable interface by default. Java provides us with the following two interfaces to compare and sort the custom objects

Comparable Interface 

public interface Comparable<T> {
    public int compareTo(T o);
}
Java 8 also provides the built in Comparator.comparing method that returns an instance of Comparable.

Comparator Interface

public interface Comparator<T> {
    int compare(T o1, T o2);
}
In this post we will use the following student class for practice.

public class Student{

 public String name;
 public Integer age;
 
 public Student() {
  
 }
 
 public Student(String name,Integer age) {
  this();
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public Integer getAge() {
  return age;
 }

 @Override
 public String toString() {
  // TODO Auto-generated method stub
  return "Name: " + name + " ,Age: " + age;
 }
}
Java 8 Example of Comparable Interface using lambda expressions

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ComparableExample{

 public static void main(String[] args) {
  List students = new ArrayList();
  
  students.add(new Student("One",4));
  students.add(new Student("Two",12));
  students.add(new Student("Three",9));
  
  students.sort( (s1,s2) -> s1.age.compareTo(s2.age));
  
  //OR Java 8 Comparator.comparing method 
  Collections.sort(students, Comparator.comparing(Student::getAge));
  
  students.forEach(System.out::println);
 }
}


Java 8 Example of Comparator Interface using lambda expressions

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class ComparatorExample{

 public static void main(String[] args) {
  List students = new ArrayList();
  
  students.add(new Student("One",4));
  students.add(new Student("Two",12));
  students.add(new Student("Three",9));
  
  Comparator ageComparator = (s1,s2) -> s1.age - s2.age;
  
  students.sort(ageComparator);
  students.forEach(System.out::println);
  
  //Reverse Order Sorting
  
  students.sort(ageComparator.reversed());
  System.out.println("Reverse Order Sorted List");
  students.forEach(System.out::println);
 }
}


Note that we have reverse sorted the collection using .reversed() method.

Conclusion

In this post, we learned how to sort collection using Comparable interface, Comparator interface and Java 8 provided Comparator.comparing method. Hope this post will help you in dealing with sorting logic :)

Comments

Popular posts from this blog

Eclipse - Server Tomcat v8.5 Server at localhost failed to start.

When I try to launch the tomcat from Eclipse, I encountered the following error Server Tomcat v8.5 Server at localhost failed to start. Solution Step 1  Delete the .snap file located at the following location     eclipse workspace Path\ .metadata\.plugins\org.eclipse.core.resources Step 2 Delete the  tmp0  folder from the following path      eclipse workspace Path \.metadata\.plugins\org.eclipse.wst.server.core Step 3  Delete the server from servers list Step 4  Remove already added Tomcat Server      i)  Click on Define a new Server     ii)  Select Server Runtime Environments     iii) Select the Tomcat Server and remove it as follows Remove Selected Server Step 5 Make sure that correct version of Server is configured in Project Properties Step 6 Restart the Eclipse IDE.

Intellij : How to add @author comment to every new class

 Introduction In this tutorial, we will learn how to add @author comments to every new class that we create. We can achieve it using either of the following two solutions Solution 1:  Automatically add @author comments to every new class using Files and Code Templates Open File -> Settings -> Editor -> File and Code Templates -> Includes Click on Includes . Under File Header , enter the following comments text /**  * @author ${USER}  * @Date ${DATE}   */ Intellij - add @author comments Solution 2: Autocompletion of @author Open File  ->  Settings  ->  Editor  -> Live Templates Select Java and then click on + button In Abbreviation, enter @a In template text , enter the following comments           /**             * @author ${USER}             * @Date ${DATE}            */ In option , Expands with select SPACE Intellij - Autocompletion @author You can simply add the @author comments by typing @a and then click SPACE

hibernate-release-5.4.4.Final - Required Jars

Introduction Hibernate (Object Relational Mapping framework) is an implementation of Java Persistence API (JPA) specification.   Required Jars for Hibernate 5.4.4 Following Jars resided inside the required folder are the mandatory jars required for Hibernate 5.4.4 antlr-2.7.7.jar byte-buddy-1.9.11.jar classmate-1.3.4.jar dom4j-2.1.1.jar FastInfoset-1.2.15.jar hibernate-commons-annotations-5.1.0.Final.jar hibernate-core-5.4.4.Final.jar istack-commons-runtime-3.0.7.jar jandex-2.0.5.Final.jar javassist-3.24.0-GA.jar javax.activation-api-1.2.0.jar javax.persistence-api-2.2.jar jaxb-api-2.3.1.jar jaxb-runtime-2.3.1.jar jboss-logging-3.3.2.Final.jar jboss-transaction-api_1.2_spec-1.1.1.Final.jar stax-ex-1.8.jar txw2-2.3.1.jar Hibernate 5.4.4 release is compatible with  Java 8 or 11  JPA 2.2 References https://hibernate.org/orm/releases/5.4/