Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Arrangering af Elementer i Rækkefølge med Sorted()-Metoden | Mellemliggende Operationer i Stream API
Stream API

bookArrangering af Elementer i Rækkefølge med Sorted()-Metoden

I Java's Stream API muliggør sorted()-metoden en effektiv sortering af elementer i en stream. Sortering er en væsentlig operation, da den forenkler databehandling og gør det lettere at arrangere elementer i den ønskede rækkefølge.

Naturlig rækkefølgesortering

Metoden sorted() er overbelastet og findes i to versioner. Lad os begynde med den første:

Stream<T> sorted();  

Denne version sorterer elementer baseret på deres naturlige rækkefølge. For at bruge denne metode skal elementerne implementere Comparable-interfacet, hvilket gør det muligt automatisk at sammenligne og ordne dem.

Praktisk eksempel

Forestil dig en fabrik med forskellige dele, hvor hver del har en unik vægt. Målet er at sortere disse dele i stigende rækkefølge baseret på deres vægt ved hjælp af Comparable-interfacet.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // List of factory parts List<Part> parts = Arrays.asList( new Part("Wheel", 10), new Part("Engine", 250), new Part("Brake", 15), new Part("Chassis", 80) ); // Sorting parts by weight in ascending order parts.stream() .sorted() // Sorting by natural order .forEach(System.out::println); } } class Part implements Comparable<Part> { private String partName; private int weight; public Part(String partName, int weight) { this.partName = partName; this.weight = weight; } public String getPartName() { return partName; } public int getWeight() { return weight; } @Override public int compareTo(Part other) { return Integer.compare(this.weight, other.weight); // Sorting by weight } @Override public String toString() { return partName + ": " + weight + "kg"; } }

Her implementerer Part klassen Comparable<Part> interfacet. compareTo() metoden sorterer dele efter weight ved at bruge Integer.compare(this.weight, other.weight).

I hovedklassen sorterer sorted() metoden streamen af dele i stigende rækkefølge baseret på deres weight.

Sortering med en Comparator

Den anden version af sorted() metoden muliggør sortering ved hjælp af en brugerdefineret Comparator. Denne metode tager en Comparator som parameter, der definerer hvordan elementer skal sammenlignes og ordnes.

Stream<T> sorted(Comparator<? super T> comparator);

Med denne fremgangsmåde kan du angive en brugerdefineret sorteringsrækkefølge, hvilket giver os mere kontrol over, hvordan elementer bliver arrangeret.

Praktisk eksempel

Antag, at du skal sortere en liste over fabriksmedarbejdere efter løn i faldende rækkefølge. Du vil bruge sorted()-metoden med en komparator for at opnå dette.

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445
package com.example; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { // List of factory employees List<Employee> employees = Arrays.asList( new Employee("John", 50000), new Employee("Emily", 75000), new Employee("Michael", 45000), new Employee("Sophia", 60000) ); // Sorting employees by salary in descending order employees.stream() .sorted(Comparator.comparingInt(Employee::getSalary).reversed()) // Sorting in descending order .forEach(System.out::println); } } class Employee { private String name; private int salary; public Employee(String name, int salary) { this.name = name; this.salary = salary; } public String getName() { return name; } public int getSalary() { return salary; } @Override public String toString() { return name + ": " + salary; } }

Her brugte du komparatoren Comparator.comparingInt(Employee::getSalary).reversed(), som først sorterer medarbejdere efter løn i stigende rækkefølge og derefter anvender reversed() for at ændre det til faldende rækkefølge.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

Can you show an example of sorting a custom class using the natural order?

How do I implement the Comparable interface in my own class?

Can you explain how to use a custom Comparator with the sorted() method?

Awesome!

Completion rate improved to 2.33

bookArrangering af Elementer i Rækkefølge med Sorted()-Metoden

Stryg for at vise menuen

I Java's Stream API muliggør sorted()-metoden en effektiv sortering af elementer i en stream. Sortering er en væsentlig operation, da den forenkler databehandling og gør det lettere at arrangere elementer i den ønskede rækkefølge.

Naturlig rækkefølgesortering

Metoden sorted() er overbelastet og findes i to versioner. Lad os begynde med den første:

Stream<T> sorted();  

Denne version sorterer elementer baseret på deres naturlige rækkefølge. For at bruge denne metode skal elementerne implementere Comparable-interfacet, hvilket gør det muligt automatisk at sammenligne og ordne dem.

Praktisk eksempel

Forestil dig en fabrik med forskellige dele, hvor hver del har en unik vægt. Målet er at sortere disse dele i stigende rækkefølge baseret på deres vægt ved hjælp af Comparable-interfacet.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // List of factory parts List<Part> parts = Arrays.asList( new Part("Wheel", 10), new Part("Engine", 250), new Part("Brake", 15), new Part("Chassis", 80) ); // Sorting parts by weight in ascending order parts.stream() .sorted() // Sorting by natural order .forEach(System.out::println); } } class Part implements Comparable<Part> { private String partName; private int weight; public Part(String partName, int weight) { this.partName = partName; this.weight = weight; } public String getPartName() { return partName; } public int getWeight() { return weight; } @Override public int compareTo(Part other) { return Integer.compare(this.weight, other.weight); // Sorting by weight } @Override public String toString() { return partName + ": " + weight + "kg"; } }

Her implementerer Part klassen Comparable<Part> interfacet. compareTo() metoden sorterer dele efter weight ved at bruge Integer.compare(this.weight, other.weight).

I hovedklassen sorterer sorted() metoden streamen af dele i stigende rækkefølge baseret på deres weight.

Sortering med en Comparator

Den anden version af sorted() metoden muliggør sortering ved hjælp af en brugerdefineret Comparator. Denne metode tager en Comparator som parameter, der definerer hvordan elementer skal sammenlignes og ordnes.

Stream<T> sorted(Comparator<? super T> comparator);

Med denne fremgangsmåde kan du angive en brugerdefineret sorteringsrækkefølge, hvilket giver os mere kontrol over, hvordan elementer bliver arrangeret.

Praktisk eksempel

Antag, at du skal sortere en liste over fabriksmedarbejdere efter løn i faldende rækkefølge. Du vil bruge sorted()-metoden med en komparator for at opnå dette.

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445
package com.example; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { // List of factory employees List<Employee> employees = Arrays.asList( new Employee("John", 50000), new Employee("Emily", 75000), new Employee("Michael", 45000), new Employee("Sophia", 60000) ); // Sorting employees by salary in descending order employees.stream() .sorted(Comparator.comparingInt(Employee::getSalary).reversed()) // Sorting in descending order .forEach(System.out::println); } } class Employee { private String name; private int salary; public Employee(String name, int salary) { this.name = name; this.salary = salary; } public String getName() { return name; } public int getSalary() { return salary; } @Override public String toString() { return name + ": " + salary; } }

Her brugte du komparatoren Comparator.comparingInt(Employee::getSalary).reversed(), som først sorterer medarbejdere efter løn i stigende rækkefølge og derefter anvender reversed() for at ændre det til faldende rækkefølge.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5
some-alt