Fredag

Denne øvelse kombinerer Lister, Sets, records, lambda‑udtryk, streams og datoer.
Målet: Øve records, List/Map, lambdas, Stream API og java.time på et dataset af Game of Thrones-karakterer. Alt koden her kan kopieres direkte ind i et projekt.
import java.time.LocalDate;
enum House { STARK, LANNISTER, TARGARYEN, TULLY, MORMONT, WILDLING, NONE }
enum Role { KING, QUEEN, LORD, LADY, COMMANDER, ADVISOR, WARRIOR, ASSASSIN, MAESTER, SMUGGLER, PRIESTESS }
enum Allegiance { NORTH, CROWN, DAENERYS, FREEFOLK, FAITH, NIGHT_WATCH, NONE }
public record GoTCharacter(
String name,
House house,
Role role,
Allegiance allegiance,
LocalDate born,
boolean alive,
int seasonsAppeared,
int killCount,
double notoriety // 0-10, hvor berømt/berygtet de er
) {}
Sæt currentYear til 300 i dine beregninger for alder osv.
import java.util.List;
import static java.time.LocalDate.of;
List<GoTCharacter> characters = List.of(
new GoTCharacter("Jon Snow", House.STARK, Role.COMMANDER, Allegiance.NORTH, of(283,12,3), true, 8, 45, 9.3),
new GoTCharacter("Arya Stark", House.STARK, Role.ASSASSIN, Allegiance.NORTH, of(289,3,29), true, 8, 65, 9.1),
new GoTCharacter("Sansa Stark", House.STARK, Role.LADY, Allegiance.NORTH, of(286,2,20), true, 8, 3, 8.6),
new GoTCharacter("Ned Stark", House.STARK, Role.LORD, Allegiance.NORTH, of(263,2,11), false,1, 5, 8.0),
new GoTCharacter("Catelyn Stark", House.TULLY, Role.LADY, Allegiance.NORTH, of(264,5,10), false,3, 2, 7.5),
new GoTCharacter("Robb Stark", House.STARK, Role.KING, Allegiance.NORTH, of(283,11,23), false,3, 22, 8.4),
new GoTCharacter("Bran Stark", House.STARK, Role.ADVISOR, Allegiance.NORTH, of(289,12,5), true, 8, 0, 7.0),
new GoTCharacter("Tyrion Lannister",House.LANNISTER,Role.ADVISOR, Allegiance.DAENERYS, of(273,1,1), true, 8, 6, 9.2),
new GoTCharacter("Jaime Lannister",House.LANNISTER, Role.WARRIOR, Allegiance.CROWN, of(266,2,14), false,8, 45, 8.7),
new GoTCharacter("Cersei Lannister",House.LANNISTER,Role.QUEEN, Allegiance.CROWN, of(266,11,30), false,8, 30, 9.0),
new GoTCharacter("Tywin Lannister",House.LANNISTER, Role.LORD, Allegiance.CROWN, of(242,10,1), false,4, 18, 8.3),
new GoTCharacter("Daenerys Targaryen",House.TARGARYEN,Role.QUEEN, Allegiance.DAENERYS, of(284,7,12), false,8, 200,9.5),
new GoTCharacter("Jorah Mormont", House.MORMONT, Role.WARRIOR, Allegiance.DAENERYS, of(260,1,20), false,8, 40, 8.1),
new GoTCharacter("Brienne of Tarth",House.NONE, Role.WARRIOR, Allegiance.NORTH, of(280,4,4), true, 8, 20, 8.4),
new GoTCharacter("Sandor Clegane", House.NONE, Role.WARRIOR, Allegiance.NONE, of(270,6,17), false,8, 50, 8.2),
new GoTCharacter("Gregor Clegane", House.NONE, Role.WARRIOR, Allegiance.CROWN, of(265,9,9), false,8, 100,8.0),
new GoTCharacter("Samwell Tarly", House.NONE, Role.MAESTER, Allegiance.NIGHT_WATCH, of(283,10,2), true, 8, 1, 7.8),
new GoTCharacter("Davos Seaworth", House.NONE, Role.SMUGGLER, Allegiance.NORTH, of(266,8,15), true, 8, 4, 7.9),
new GoTCharacter("Melisandre", House.NONE, Role.PRIESTESS, Allegiance.FAITH, of(200,1,1), false,8, 10, 8.1),
new GoTCharacter("Tormund Giantsbane",House.WILDLING,Role.WARRIOR, Allegiance.FREEFOLK, of(270,3,3), true, 8, 35, 8.3)
);
- Udskriv alle karakterer sorteret efter navn.
- Udskriv alle karakterer fra huset
STARK. - Hent top-3 mest berygtede (
notoriety) der stadig er i live. - Brug
LocalDateogPeriodtil at finde den ældste nulevende karakter. - Lav et
Map<Allegiance, List<GoTCharacter>>og udskriv antal pr. allegiance. - Find samlet antal kills for karakterer født efter
of(280, 1, 1). - Transformér til
Map<String, Integer>med navn → sæsoner, og filtrér kun dem med >5 sæsoner. - Brug
partitioningBytil at splitte levende/døde og udskriv gennemsnitlig notoriety for hver gruppe. - Udpeg pr.
Houseden karakter med højest killCount (maxByinde i grouping). - Lav en stream, der returnerer de roller (
Role), der ikke optræder i nogen karakter (hint:EnumSet.allOf(Role.class)minus brugte). Indsæt evt. en ekstra rolle iRole-enum for at være sikker på at der er en rolle som ikke bruges. - Find gennemsnitlig
killCountpr.House(Collectors.groupingBy+averagingInt).
Find selv på interessante eller sjove opgaver ud fra datasættet! Du kan også udvide GoTCharacter-recorden med flere felter, hvis du har idéer til flere data at arbejde med.