Tuesday, 20 January 2015

Java8 Lambdas Tip - Collect SortedGroupingBy

Java8 introduces a great new feature which easily allows your code to decompose a List of objects into a Map of Lists of objects keyed on a particular attribute.

This is best shown by example.
Let's say you have a list of Books as below:

public class Book{
    String author;
    Date published;
    int copiesSold;
    String catagory;

    public String getAuthor() {
        return author;

    public Date getPublished() {
        return published;

    public int getCopiesSold() {
        return copiesSold;

    public String getCatagory() {
        return catagory;

To group them into a map of authors to books used to be a little bit painful but is now a one liner!

Map<String, List<Book>> authorsToBooks = books

The only problem with this that you might have is that the default Map implementation returned is a HashMap which of course is unordered and you might well want to order by the key, in this example by the author.  Of course, you could always sort the Map in a second step but there's a way to do it in one line.

To fix that let's introduce this static utility function:

public static <T, K extends Comparable<K>> Collector<T, ?, TreeMap<K, List<T>>> 
   sortedGroupingBy(Function<T, K> function) {
        return Collectors.groupingBy(function, 
           TreeMap::new, Collectors.toList());

We can call it like this:

Map<String, List<Book>> authorsToBooks = books

This time the map implementation is a TreeMap which has returned the Map of authors to their books in alphabetical order. 


  1. Thanks for your informative post on Java application development. This open source platform assists software developers to create stunning mobile application with ease. Further, they can make use of this platform at free of cost.JAVA Training|Java Courses in Chennai

  2. I have read your blog its very Interesting. Thanks for sharing. ERP Providers in Chennai | ERP Software Company Chennai. We provide best quality cost effective ERP software applications and end to end enterprise solutions to all the industry verticals with the affordable cost.

  3. Thank you for this valuable information. I have got some important suggestions from it. Get your business to the next level in simple steps.
    ERP Solutions in Chennai | ERP Software Solutions in Chennai.


  4. The website is looking bit flashy and it catches the visitors eyes. A design is pretty simple .
    regionale stellenbörse


  5. Thanks for sharing the predictions on Is very Useful Thanks for sharing the post looking forward for more posts.http://www.chloros.in/customized-erp-solutions.html

    I am fully satisfied with the information you have posted. Good job. Keep posting:)