Hei.
Her er et raskt utkast.
Ikke akkurat vakkert og lagt fra feilfritt, men kanskje du kan la deg inspirere til å gjøre dette bedre?
Inputfilen inneholder (sauId - minutter):
Kode
2 34
1 2
9 32
1 6
4 7
2 4
Resultatet som kommer i output-filen er:
Kode
Total drikketid for sau med id: 1 er: 8 minutter
Total drikketid for sau med id: 2 er: 38 minutter
Total drikketid for sau med id: 4 er: 7 minutter
Total drikketid for sau med id: 9 er: 32 minutter
Verdier for alle sau:
Gjennomsnitt: 14 minutter
Minste drikketid: 2 minutter
Største drikketid: 34 minutter
Kildekode (start main i din favoritt-IDE for å kjøre):
Kode
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class SauApplication {
private final Map<String, List<Integer>> sauOgDrikkeverdier = new HashMap<>();
public SauApplication() throws Exception {
lesInnLogfil();
String resultater;
resultater = kalkulerVerdierPerSau();
resultater += kalkulerVerdierForAlleSauer();
lagreVerdierTilFil(resultater);
}
private void lagreVerdierTilFil(String resultat) throws FileNotFoundException {
try (PrintWriter out = new PrintWriter("src/resultat.txt")) {
out.println(resultat);
}
}
private String kalkulerVerdierForAlleSauer() {
List<Integer> allValues = sauOgDrikkeverdier.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
int gjennomsnitt = (int) allValues
.stream()
.mapToInt(Integer::intValue)
.average()
.getAsDouble();
int min = allValues
.stream()
.mapToInt(Integer::intValue)
.min()
.getAsInt();
int max = allValues
.stream()
.mapToInt(Integer::intValue)
.max()
.getAsInt();
return "\n\nVerdier for alle sau:\n" +
"Gjennomsnitt: " + gjennomsnitt + " minutter\n" +
"Minste drikketid: " + min + " minutter\n" +
"Største drikketid: " + max + " minutter\n";
}
private String kalkulerVerdierPerSau() {
StringBuilder verdierPrSau = new StringBuilder();
for (String sauId : sauOgDrikkeverdier.keySet()) {
int antallMinutter = sauOgDrikkeverdier.get(sauId)
.stream()
.mapToInt(Integer::intValue)
.sum();
verdierPrSau
.append("Total drikketid for sau med id: ")
.append(sauId).append(" er: ")
.append(antallMinutter)
.append(" minutter\n");
}
return verdierPrSau.toString();
}
private void lesInnLogfil() throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("src/log.txt"))) {
String linje;
while ((linje = br.readLine()) != null) {
String[] sauOgTidLinje = linje.split(" ");
String sau = sauOgTidLinje[0];
String tid = sauOgTidLinje[1];
sauOgDrikkeverdier.computeIfAbsent(sau, k -> new ArrayList<>());
sauOgDrikkeverdier.get(sau).add(Integer.valueOf(tid));
}
}
}
public static void main(String[] argz) throws Exception {
new SauApplication();
}
}