sorted()
method.
sorted()
: It sorts the elements of stream using natural ordering. The element class must implement
Comparable
interface.
sorted(Comparator super T> comparator)
: Here we create an instance of
Comparator
using lambda expression. We can sort the stream elements in ascending and descending order.
list.stream().sorted()
Comparator
provides
reverseOrder()
method. We use it as follows.
list.stream().sorted(Comparator.reverseOrder())
Comparator
to sort the list.
list.stream().sorted(Comparator.comparing(Student::getAge))
Comparator
provides
reversed()
method. We use this method as follows.
list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
List
of objects of
Student
class. First we will sort by natural ordering and then using
Comparator
. We will reverse both ordering natural ordering as well as ordering provided by
Comparator
in our example.
package com.concretepage; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class SortList { public static void main(String[] args) { Listlist = new ArrayList (); list.add(new Student(1, "Mahesh", 12)); list.add(new Student(2, "Suresh", 15)); list.add(new Student(3, "Nilesh", 10)); System.out.println("---Natural Sorting by Name---"); List slist = list.stream().sorted().collect(Collectors.toList()); slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Natural Sorting by Name in reverse order---"); slist = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Sorting using Comparator by Age---"); slist = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList()); slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Sorting using Comparator by Age with reverse order---"); slist = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList()); slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); } }
package com.concretepage; public class Student implements Comparable{ private int id; private String name; private int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Student ob) { return name.compareTo(ob.getName()); } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } final Student std = (Student) obj; if (this == std) { return true; } else { return (this.name.equals(std.name) && (this.age == std.age)); } } @Override public int hashCode() { int hashno = 7; hashno = 13 * hashno + (name == null ? 0 : name.hashCode()); return hashno; } }
---Natural Sorting by Name--- Id:1, Name: Mahesh, Age:12 Id:3, Name: Nilesh, Age:10 Id:2, Name: Suresh, Age:15 ---Natural Sorting by Name in reverse order--- Id:2, Name: Suresh, Age:15 Id:3, Name: Nilesh, Age:10 Id:1, Name: Mahesh, Age:12 ---Sorting using Comparator by Age--- Id:3, Name: Nilesh, Age:10 Id:1, Name: Mahesh, Age:12 Id:2, Name: Suresh, Age:15 ---Sorting using Comparator by Age with reverse order--- Id:2, Name: Suresh, Age:15 Id:1, Name: Mahesh, Age:12 Id:3, Name: Nilesh, Age:10
Set
of objects of
Student
class. This class must override
equals()
and
hashCode()
methods to identify unique elements. For natural ordering
Student
class needs to implement
Comparable
interface. In our example we will sort our
Set
using natural ordering as well as ordering provided by
Comparator
.
package com.concretepage; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class SortSet { public static void main(String[] args) { Setset = new HashSet (); set.add(new Student(1, "Mahesh", 12)); set.add(new Student(2, "Suresh", 15)); set.add(new Student(3, "Nilesh", 10)); System.out.println("---Natural Sorting by Name---"); set.stream().sorted().forEach(e -> System.out.println("Id:" + e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Natural Sorting by Name in reverse order---"); set.stream().sorted(Comparator.reverseOrder()).forEach(e -> System.out.println("Id:" + e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Sorting using Comparator by Age---"); set.stream().sorted(Comparator.comparing(Student::getAge)) .forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); System.out.println("---Sorting using Comparator by Age in reverse order---"); set.stream().sorted(Comparator.comparing(Student::getAge).reversed()) .forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge())); } }
---Natural Sorting by Name--- Id:1, Name: Mahesh, Age:12 Id:3, Name: Nilesh, Age:10 Id:2, Name: Suresh, Age:15 ---Natural Sorting by Name in reverse order--- Id:2, Name: Suresh, Age:15 Id:3, Name: Nilesh, Age:10 Id:1, Name: Mahesh, Age:12 ---Sorting using Comparator by Age--- Id:3, Name: Nilesh, Age:10 Id:1, Name: Mahesh, Age:12 Id:2, Name: Suresh, Age:15 ---Sorting using Comparator by Age in reverse order--- Id:2, Name: Suresh, Age:15 Id:1, Name: Mahesh, Age:12 Id:3, Name: Nilesh, Age:10
Map
by key as well as value.
package com.concretepage; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class SortMap { public static void main(String[] args) { Mapmap = new HashMap<>(); map.put(15, "Mahesh"); map.put(10, "Suresh"); map.put(30, "Nilesh"); System.out.println("---Sort by Map Value---"); map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue)) .forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue())); System.out.println("---Sort by Map Key---"); map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)) .forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue())); } }
---Sort by Map Value--- Key: 15, Value: Mahesh Key: 30, Value: Nilesh Key: 10, Value: Suresh ---Sort by Map Key--- Key: 10, Value: Suresh Key: 15, Value: Mahesh Key: 30, Value: Nilesh
package com.concretepage; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class SortMapOfCustomObject { public static void main(String[] args) { Mapmap = new HashMap<>(); map.put(1, new Student(1, "Mahesh", 12)); map.put(2, new Student(2, "Suresh", 15)); map.put(3, new Student(3, "Nilesh", 10)); //Map Sorting by Value i.e student's natural ordering i.e by name map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue)) .forEach(e -> { Integer key = (Integer)e.getKey(); Student std = (Student)e.getValue(); System.out.println("Key: " + key +", value: ("+ std.getId() +", "+ std.getName()+", "+ std.getAge()+")"); }); } }
Key: 1, value: (1, Mahesh, 12) Key: 3, value: (3, Nilesh, 10) Key: 2, value: (2, Suresh, 15)