Streams API
I denne øvelse arbejder du med en liste af bøger og bruger Stream API’et til forskellige operationer på data.
1.1 Opret Book-klassen
Lav en Book-klasse med attributterne title, author, publicationYear, pages og rating.
1.2 Datasæt
Opret en samling af Book-objekter. Du kan lave et lille hardcodet datasæt eller læse fra fil/database.
1.3 Stream-behandling
Brug Stream API til følgende operationer på boglisten:
- Find gennemsnits-rating for alle bøger.
- Filtrér og vis bøger udgivet efter et bestemt år.
- Sortér bøger efter rating faldende.
- Find og vis titlen på bogen med højest rating.
- Gruper bøger efter forfatter og beregn gennemsnits-rating pr. forfatter.
- Beregn det samlede sidetal for alle bøger.
Kæd flere Stream-operationer sammen (filter → sort → map) for at løse komplekse opgaver.
Brug terminal-operationer som collect, forEach eller reduce til at samle og vise resultater.
Et forenklet skelet kunne se sådan ud:
import java.util.List;
class Book {
private String title;
private String author;
private int publicationYear;
private double rating;
private int pages;
// Constructor, getters og evt. setters
}
public class StreamProcessing {
public static void main(String[] args) {
// Opret en liste af bøger
// Beregn gennemsnits-rating
// Filtrér bøger efter år
// Sortér bøger efter rating (faldende)
// Find titlen på bogen med højest rating
// Gruper bøger efter forfatter og beregn gennemsnit
// Beregn samlet sidetal
}
}
Collectors er hjælpeklassen i java.util.stream, der giver metoder til reduktion og aggregation på streams. Den bruges sammen med Stream API til at samle elementer i lister/sets/maps eller til summering, gruppering, optælling m.m.
Collectors kapsler logikken for opsamling og giver dig kort syntaks til at transformere og aggregere data.
Typiske opgaver med collectors:
Collectors.toList(): samler til enList.Collectors.toSet(): samler til etSet.Collectors.toCollection(): samler til en specificeret collection-type.
Collectors.summingInt(),summingLong(),summingDouble(): sum.Collectors.averagingInt(),averagingLong(),averagingDouble(): gennemsnit.Collectors.counting(): optælling.Collectors.maxBy(),minBy(): max/min efter comparator.
Collectors.groupingBy(): grupperer efter classifier og returnerer et map.
2.1 Opret Transaction-klassen
Lav en Transaction-klasse med felter id, amount og currency.
2.2 Datasæt
Opret en samling Transaction-objekter (hardcodet eller læst ind).
2.3 Aggregation med Collectors
Brug Collectors til disse operationer:
- Beregn den totale sum af alle beløb.
- Gruper transaktioner efter valuta og beregn summen pr. valuta.
- Find det højeste beløb.
- Find gennemsnitsbeløbet.
2.4 Opsamling af resultater
Brug collect med forskellige collectors til at samle resultaterne.
Et forenklet skelet kunne se sådan ud:
import java.util.List;
class Transaction {
private int id;
private double amount;
private String currency;
// constructor, getters
}
public class CollectorsExercise {
public static void main(String[] args) {
List<Transaction> transactions = List.of(
new Transaction(1, 100.0, "USD"),
new Transaction(2, 150.0, "EUR"),
new Transaction(3, 200.0, "USD"),
new Transaction(4, 75.0, "GBP"),
new Transaction(5, 120.0, "EUR"),
new Transaction(6, 300.0, "GBP")
);
// Calculate the total sum of all transaction amounts
double totalSum = transactions.stream()
.mapToDouble(Transaction::getAmount)
.sum();
System.out.println("Total sum of all transactions: " + totalSum);
// Gruper transaktioner efter valuta og beregn sum pr. valuta
// Find største transaktion
// Find gennemsnitsbeløb
}
}
Forestíl dig en samling af employees med felter name, age, department og salary. Opgaven er at lave forskellige dataanalyser med lambdas og streams.
3.1 Opret Employee-klassen med felterne ovenfor.
3.2 Datasæt: Opret en samling af Employee-objekter (hardcodet eller læst ind).
3.3 Dataanalyse:
Implementér følgende med lambdas/streams:
- Beregn gennemsnitsalder.
- Find medarbejderen med højest løn.
- Gruper efter afdeling og beregn gennemsnitsløn pr. afdeling.
- Tæl antal medarbejdere i hver afdeling.
- Find de tre ældste medarbejdere.
- Filtrér og vis medarbejdere med løn over en given grænse.
3.4 Sortering
Brug sorted til at sortere efter forskellige kriterier som age, salary eller name.