DEV Community

Cover image for Dart Sort List of objects Descending
Tien Nguyen
Tien Nguyen

Posted on

8 1

Dart Sort List of objects Descending

In this tutorial, we'll show you some ways and functions to sort list of Objects descending in Dart/Flutter

Similar to Ascending order, but you can do this with three ways:

  • using custom compare function.
  • extending Comparable abstract class, override compareTo() method and using reversed.
  • extending Comparable abstract class, override compareTo() method and using fast_immutable_collections library.

Full post: Dart/Flutter Sort List of objects

Dart/Flutter Sort List of objects Descending using custom compare function

Pass a custom compare function into list's sort() method with swap the places of the items.

class Customer {
  String name;
  int age;

  Customer(this.name, this.age);

  @override
  String toString() {
    return '{ ${this.name}, ${this.age} }';
  }
}

main() {
  List<Customer> customers = [];
  customers.add(Customer('Jack', 23));
  customers.add(Customer('Adam', 27));
  customers.add(Customer('Katherin', 25));

  customers.sort((a, b) => b.age.compareTo(a.age));
  print('Sort by Age: ' + customers.toString());

  customers.sort((a, b) => b.name.compareTo(a.name));
  print('Sort by Name: ' + customers.toString());
}
Enter fullscreen mode Exit fullscreen mode

Output:

Sort by Age: [{ Adam, 27 }, { Katherin, 25 }, { Jack, 23 }]
Sort by Name: [{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]

Dart/Flutter Sort List of objects Descending using Comparable abstract class

We can sort a List of objects in Descending order using reversed property. It returns an Iterable of the objects in the list.

class Customer extends Comparable {
  String name;
  int age;

  Customer(this.name, this.age);

  @override
  String toString() {
    return '{ ${this.name}, ${this.age} }';
  }

  // sort by Name (asc)
  @override
  int compareTo(other) {
    return this.name.compareTo(other.name);
  }
}

main() {
 List<Customer> customers = [];
  customers.add(Customer('Jack', 23));
  customers.add(Customer('Adam', 27));
  customers.add(Customer('Katherin', 25));

  customers.reversed.toList();
  print(customers);
}
Enter fullscreen mode Exit fullscreen mode

Output:

[{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]

Firstly, we extend Comparable abstract class and override compareTo() method, then we call list.reversed.toList().

.reversed does NOT reverse the list. Instead, it sorts the original list in Ascending order, then returns a Descending Iterable. SO we need .toList() finally.

However, how about large lists?
Let's look at another approach.

Dart/Flutter Sort List of objects Descending using a library

We can create our immutable collections and use Fast Immutable Collections library directly.
The class is the same as previous approach (extends Comparable and override compareTo() method). But it uses sortReversed() which is much faster.

import 'package:fast_immutable_collections/fast_immutable_collections.dart';

class Customer extends Comparable {
  ...
  @override
  int compareTo(other) {
    return this.name.compareTo(other.name);
  }
}

main() {
 List<Customer> customers = [];
  customers.add(Customer('Jack', 23));
  customers.add(Customer('Adam', 27));
  customers.add(Customer('Katherin', 25));

  customers.sortReversed();
  print(customers);
}
Enter fullscreen mode Exit fullscreen mode

Output:

[{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]

Further Reading

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️