Skip to content
Snippets Groups Projects
Commit dd85ee47 authored by Iina Siekkinen's avatar Iina Siekkinen
Browse files

henkilotunnus ja vaestorekisteri

parent 5cfa8167
Branches master
No related tags found
No related merge requests found
Pipeline #78626 passed
......@@ -5,6 +5,7 @@ import java.util.regex.Pattern;
public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
private String tunnus;
public HenkiloTunnus(String tunnus) throws IllegalArgumentException {
if (!onValidiHenkilotunnus(tunnus)) throw new IllegalArgumentException();
this.tunnus = tunnus;
......@@ -14,10 +15,6 @@ public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
return tunnus;
}
public void setTunnus(String tunnus) {
this.tunnus = tunnus;
}
public static boolean onValidiHenkilotunnus(String henkilotunnus) {
String regex = "^(\\d{2})(\\d{2})(\\d{2})([-+A])(\\d{3})([0-9A-FHJ-NPR-Y])$";
Pattern pattern = Pattern.compile(regex);
......@@ -43,6 +40,7 @@ public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
String tarkistusMerkkiOikea = laskeTarkistusMerkki(syntymaLuku);
return tarkistusMerkkiOikea.equals(String.valueOf(tarkistusMerkki));
}
private static int muodostaTaydellinenVuosi(String vuosi, char erottavaMerkki) {
int vuosiInt = Integer.parseInt(vuosi);
switch (erottavaMerkki) {
......@@ -56,6 +54,7 @@ public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
throw new IllegalArgumentException("Virheellinen erottava merkki: " + erottavaMerkki);
}
}
private static boolean onValidiPaivays(String paiva, String kuukausi, int vuosi) {
int p = Integer.parseInt(paiva);
int k = Integer.parseInt(kuukausi);
......@@ -78,6 +77,7 @@ public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
}
return false;
}
private static String laskeTarkistusMerkki(int syntymaLuku) {
String merkit = "0123456789ABCDEFHJKLMNPRSTUVWXY";
int indeksi = syntymaLuku % 31;
......@@ -93,4 +93,31 @@ public class HenkiloTunnus implements Comparable<HenkiloTunnus> {
public String toString() {
return tunnus;
}
public static Comparator<HenkiloTunnus> syntymaAikaJaLoppuosaComparator() {
return new Comparator<HenkiloTunnus>() {
@Override
public int compare(HenkiloTunnus o1, HenkiloTunnus o2) {
// Eristetään syntymäpäivämäärä
String paiva1 = o1.getTunnus().substring(0, 2);
String kuukausi1 = o1.getTunnus().substring(2, 4);
String vuosi1 = o1.getTunnus().substring(4, 6);
int syntyma1 = Integer.parseInt(vuosi1 + kuukausi1 + paiva1);
String paiva2 = o2.getTunnus().substring(0, 2);
String kuukausi2 = o2.getTunnus().substring(2, 4);
String vuosi2 = o2.getTunnus().substring(4, 6);
int syntyma2 = Integer.parseInt(vuosi2 + kuukausi2 + paiva2);
int syntymaVertailu = Integer.compare(syntyma1, syntyma2);
if (syntymaVertailu != 0) {
return syntymaVertailu;
}
String loppuOsa1 = o1.getTunnus().substring(7); // Oletetaan, että loppuosa alkaa indeksistä 7
String loppuOsa2 = o2.getTunnus().substring(7);
return loppuOsa1.compareTo(loppuOsa2);
}
};
}
}
\ No newline at end of file
......@@ -13,32 +13,21 @@ public class Vaestorekisteri {
public Vaestorekisteri() {
nimiRekisteri = new TreeMap<>();
hetuRekisteri = new HashMap<>();
ikajarjestysRekisteri = new TreeMap<>();
// Käytetään uutta Comparatoria syntymäajan ja loppuosan mukaan
ikajarjestysRekisteri = new TreeMap<>(HenkiloTunnus.syntymaAikaJaLoppuosaComparator());
}
public void lisaaRekisteriin(Kansalainen tyyppi) {
if (nimiRekisteri.containsKey(tyyppi.getSukunimi())) {
TreeMap<EtuNimi, HashSet<Kansalainen>> tempTree = nimiRekisteri.get(tyyppi.getSukunimi());
if (tempTree.containsKey(tyyppi.getEtunimi())) {
HashSet<Kansalainen> tempSet = tempTree.get(tyyppi.getEtunimi());
tempSet.add(tyyppi);
}else {
HashSet<Kansalainen> tempSet = new HashSet<>();
tempSet.add(tyyppi);
tempTree.put(tyyppi.getEtunimi(),tempSet);
}
}
else {
HashSet<Kansalainen> tempSet = new HashSet<>();
tempSet.add(tyyppi);
TreeMap<EtuNimi, HashSet<Kansalainen>> tempTree = new TreeMap<>();
tempTree.put(tyyppi.getEtunimi(), tempSet);
nimiRekisteri.put(tyyppi.getSukunimi(), tempTree);
}
nimiRekisteri
.computeIfAbsent(tyyppi.getSukunimi(), k -> new TreeMap<>())
.computeIfAbsent(tyyppi.getEtunimi(), k -> new HashSet<>())
.add(tyyppi);
hetuRekisteri.put(tyyppi.getHenkilotunnus(), tyyppi);
ikajarjestysRekisteri.put(tyyppi.getHenkilotunnus(), tyyppi);
}
public void muutaKansalaisenNimet(HenkiloTunnus hetu, EtuNimi etuNimi, Sukunimi sukunimi) {
if (hetuRekisteri.containsKey(hetu)) {
Kansalainen tempKansalainen = hetuRekisteri.get(hetu);
......@@ -46,6 +35,7 @@ public class Vaestorekisteri {
tempKansalainen.setSukunimi(sukunimi);
}
}
public void tulostaNimirekisteri() {
System.out.println("Kansalaiset listattuna sukunimen ja etunimen mukaisessa järjestyksessä");
for (Map.Entry<Sukunimi, TreeMap<EtuNimi, HashSet<Kansalainen>>> sukunimiEntry : nimiRekisteri.entrySet()) {
......@@ -74,5 +64,4 @@ public class Vaestorekisteri {
System.out.println(" " + kansalainenEntry.getValue());
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment