Java sorting string set

Java 8 – How to sort Set with stream.sorted()

In this quick tutorial, we’ll learn how to sort Set in Java 8. stream.sorted() is a predefined method of Stream interface for sorting a Set or any Collection implemented classes.

Sorting the elements of Set is similar to the sorting of the list.

1. Natural/Default Sorting Order

In this, we have a Set of employees and the type of the set is String.

package org.websparrow.sorting; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class SetSorting < public static void main(String[] args) < Setemployees = new HashSet<>(); employees.add("Sunny Tiwari"); employees.add("Ashutosh Pandey"); employees.add("Vipin Singh"); employees.add("Mintoo Prasad"); System.out.println("--- Set before sorted ---"); employees.forEach(System.out::println); System.out.println("--- Set after sorted ---"); employees.stream().sorted().forEach(System.out::println); > >
--- Set before sorted --- Vipin Singh Ashutosh Pandey Mintoo Prasad Sunny Tiwari --- Set after sorted --- Ashutosh Pandey Mintoo Prasad Sunny Tiwari Vipin Singh

Alternately, we can also pass the Comparator.naturalOrder() as argument in overloaded sorted() method i.e. sorted(Comparator.naturalOrder()) which gives the same output.

employees .stream() .sorted(Comparator.naturalOrder()) .forEach(System.out::println);

Similarly, we can also compare the elements one by one by calling compareTo(String object) method as we do in the older version of Java. And it also produces the same output.

employees .stream() .sorted((o1, o2) -> o1.compareTo(o2)) .forEach(System.out::println);

2. Sorting in Reverse Order

The Set elements can be sorted in revered order by passing the Comparator.naturalOrder() . It returns a comparator that imposes the reverse of the natural ordering.

package org.websparrow.sorting; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class SetSortingReverseOrder < public static void main(String[] args) < Setset = new HashSet<>(); set.add("Sunny Tiwari"); set.add("Ashutosh Pandey"); set.add("Vipin Singh"); set.add("Mintoo Prasad"); System.out.println("--- Set before sorted ---"); set.forEach(System.out::println); System.out.println("--- Set after sorted (Reverse order) ---"); set.stream().sorted(Comparator.reverseOrder()) .forEach(System.out::println); System.out.println("--- Set after sorted (Reverse order) Old days ---"); set.stream().sorted((o1, o2) -> o2.compareTo(o1)) .forEach(System.out::println); > >
--- Set before sorted --- Vipin Singh Ashutosh Pandey Mintoo Prasad Sunny Tiwari --- Set after sorted (Reverse order) --- Vipin Singh Sunny Tiwari Mintoo Prasad Ashutosh Pandey --- Set after sorted (Reverse order) Old days --- Vipin Singh Sunny Tiwari Mintoo Prasad Ashutosh Pandey

3. Sorting Set of Custom Object

We can also sort custom object Set by using stream.sorted() method. Let’s we have Car class along with its attributes like id, brand name, model year, etc.

package org.websparrow.sorting; public class Car < // Generate Getters and Setters. private int id; private String brand; private int modelYear; public Car(int id, String brand, int modelYear) < this.id = id; this.brand = brand; this.modelYear = modelYear; >@Override public String toString() < return "Car [id=" + id + ", brand=" + brand + ", modelYear=" + modelYear + "]"; >>

3.1 Sort by id (Natural/Default Sort Order)

package org.websparrow.sorting; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class SetSortingCustomObject < public static void main(String[] args) < Setset = new HashSet<>(); set.add(new Car(166, "Tata", 1967)); set.add(new Car(112, "Mahindra", 1978)); set.add(new Car(66, "Hindustan Motors", 1950)); set.add(new Car(203, "BMW", 1998)); System.out.println("--- Cars before sorted ---"); set.forEach(System.out::println); System.out.println("--- Cars after sorted ---"); set.stream().sorted(Comparator.comparingInt(Car::getId)) .forEach(System.out::println); System.out.println("--- Cars after sorted (Old days) ---"); set.stream().sorted((o1, o2) -> o1.getId() - o2.getId()) .forEach(System.out::println); > >
--- Cars before sorted --- Car [id=166, brand=Tata, modelYear=1967] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=66, brand=Hindustan Motors, modelYear=1950] Car [id=203, brand=BMW, modelYear=1998] --- Cars after sorted --- Car [id=66, brand=Hindustan Motors, modelYear=1950] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=166, brand=Tata, modelYear=1967] Car [id=203, brand=BMW, modelYear=1998] --- Cars after sorted (Old days) --- Car [id=66, brand=Hindustan Motors, modelYear=1950] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=166, brand=Tata, modelYear=1967] Car [id=203, brand=BMW, modelYear=1998]

3.2 Sort by id (Reverse Order)

Comparator ‘s reversed() method is used to reveres the elements of a sorted Set.

package org.websparrow.sorting; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class SetSortingCustomObject < public static void main(String[] args) < Setset = new HashSet<>(); set.add(new Car(166, "Tata", 1967)); set.add(new Car(112, "Mahindra", 1978)); set.add(new Car(66, "Hindustan Motors", 1950)); set.add(new Car(203, "BMW", 1998)); System.out.println("--- Cars before sorted ---"); set.forEach(System.out::println); System.out.println("--- Cars after sorted (Reverse order)---"); set.stream().sorted(Comparator.comparingInt(Car::getId).reversed()) .forEach(System.out::println); System.out.println("--- Cars after sorted (Reverse order) Old days ---"); set.stream().sorted((o1, o2) -> o2.getId() - o1.getId()) .forEach(System.out::println); > >
--- Cars before sorted --- Car [id=166, brand=Tata, modelYear=1967] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=66, brand=Hindustan Motors, modelYear=1950] Car [id=203, brand=BMW, modelYear=1998] --- Cars after sorted (Reverse order)--- Car [id=203, brand=BMW, modelYear=1998] Car [id=166, brand=Tata, modelYear=1967] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=66, brand=Hindustan Motors, modelYear=1950] --- Cars after sorted (Reverse order) Old days --- Car [id=203, brand=BMW, modelYear=1998] Car [id=166, brand=Tata, modelYear=1967] Car [id=112, brand=Mahindra, modelYear=1978] Car [id=66, brand=Hindustan Motors, modelYear=1950]

3.3 Sort by brand

Similarly, we can also sort Car by its brand name.

System.out.println("--- Cars after sorted ---"); set.stream().sorted(Comparator.comparing(Car::getBrand)) .forEach(System.out::println); System.out.println("--- Cars after sorted Old days ---"); set.stream().sorted((o1, o2) -> o1.getBrand().compareTo(o2.getBrand())) .forEach(System.out::println);

3.4 Sort by brand (Reverse Order)

System.out.println("--- Cars after sorted (Reverse order)---"); set.stream().sorted(Comparator.comparing(Car::getBrand).reversed()) .forEach(System.out::println); System.out.println("--- Cars after sorted (Reverse order) Old days ---"); set.stream().sorted((o1, o2) -> o2.getBrand().compareTo(o1.getBrand())) .forEach(System.out::println);

References

Источник

Читайте также:  Клиент web сервер java

Сортировка списка строк в Java

В этом посте мы обсудим, как отсортировать список строк в лексикографическом порядке в Java.

1. Использование Collections.sort() метод

Простое решение для на месте отсортировать список строк в лексикографическом порядке с помощью Collections.sort() метод. Он принимает изменяемый список, размер которого не обязательно должен изменяться.

результат:

[Amazon, Apple, Facebook, Google, Netflix]

The Collections.sort() метод необязательно принимает компаратор, чтобы обеспечить точный контроль над порядком сортировки. Чтобы сделать сравнение между двумя строками нечувствительными к регистру, вы можете использовать String.CASE_INSENSITIVE_ORDER comparator.

результат:

[Amazon, APPLE, Facebook, GOOGLE, Netflix]

2. Использование List.sort() метод

Другой альтернативой сортировке списка строк на месте является метод List.sort() метод, добавленный в спецификацию JDK 1.8. Collections.sort() метод представляет собой оболочку над List.sort() метод. Следовательно, приведенный выше код эквивалентен:

результат:

[Amazon, Apple, Facebook, Google, Netflix]

Вы можете использовать String.CASE_INSENSITIVE_ORDER компаратор, чтобы операция сортировки сравнивала строки, игнорируя их порядок.

результат:

[Amazon, APPLE, Facebook, GOOGLE, Netflix]

3. Использование Stream.sorted() метод

Чтобы создать отсортированную копию списка, вы можете использовать Java 8 Stream. Идея состоит в том, чтобы создать последовательный поток по элементам в списке, отсортировать поток с помощью sorted() и соберите все отсортированные элементы в новый список. Это показано ниже:

Источник

How to sort a Set in Java example

There are different versions of Java available with different ways to sort collections of objects. We will be showing examples of how to sort a set of objects or strings alphabetically in Java 8, Java 7 and older versions using comparator.

For this example we will take a Person object and put them all in a set. Each Person have a name and we will sort our collection of Person object alphabetically. It means that we need to implement a comparator which compares Strings.

Читайте также:  Что делает в python index

Let’s assume we can’t implement a compareTo methods inside a Person class. How do we go ahead and compare the objects?

In Java 7 and earlier we would go with overriding the compare method inside a Comparator class. We would than use a compareTo method to compare the strings.

First things first. We can’t sort a Java Set collection by calling Collections.sort() method on a Set. That is because most implementations of Java Set doesn’t have a concept of order. A Set is something without an order by definition in Java.

In order to sort a Java Set we need to convert it to a list first.

Java 7 and earlier

Set items = getPersons(); List personsSorted = new ArrayList<>(); for(Person p : items)

Now that we have an ArrayList, we can use Collections.sort() method and provide our custom anonymous inner Comparator class that compares Person’s names and sorts the list alphabetically.

Collections.sort(personsSorted, new Comparator() < @Override public int compare(Person o1, Person o2) < return o1.getName().compareTo( o2.getName()); >>);

Java 8

In Java 8 there are a lot of new cool features. One of them is streams. It is much easier and more beautiful to convert a Set into a List by using a stream method:

Set items = getPersons(); List personsSorted = items.stream().collect(Collectors.toList());

Another new feature in Java 8 is lambdas. Lambdas are expressions which recognize the object type from the context.

Collections.sort(personsSorted, (o1, o2) -> o1.getName().compareTo(o2.getName()));

The code written in Java 8 is more elegant and is probably faster too.

Источник

Оцените статью