Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Arrays;
- import java.util.DoubleSummaryStatistics;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.stream.Collectors;
- interface MeasuredTemperature{
- double getFahrenheit();
- double getCelsius();
- }
- class TemperatureF implements MeasuredTemperature{
- private final Double tempF;
- public TemperatureF(String tempF) {
- this.tempF = Double.parseDouble(tempF.substring(0,tempF.length()-1));
- }
- @Override
- public double getFahrenheit() {
- return tempF;
- }
- @Override
- public double getCelsius() {
- return ((tempF-32)*5)/9;
- }
- }
- class TemperatureC implements MeasuredTemperature{
- private final Double tempC;
- public TemperatureC(String tempC) {
- this.tempC = Double.parseDouble(tempC.substring(0,tempC.length()-1));
- }
- @Override
- public double getFahrenheit() {
- return ((tempC*9)/5 + 32);
- }
- @Override
- public double getCelsius() {
- return tempC;
- }
- }
- class TemperatureInADay implements Comparable<TemperatureInADay>{
- private final int day;
- private final List<MeasuredTemperature> measuredTemperatureList;
- public TemperatureInADay(int day, List<MeasuredTemperature> measuredTemperatureList) {
- this.day = day;
- this.measuredTemperatureList = measuredTemperatureList;
- }
- public static TemperatureInADay createTemperature(String line){
- String[] arrayElements = line.split("\\s+");
- int day = Integer.parseInt(arrayElements[0]);
- List<MeasuredTemperature> measuredTemperatureList = new LinkedList<>();
- Arrays.stream(arrayElements).skip(1)
- .forEach(
- element ->{
- if (element.charAt(element.length()-1) == 'F'){
- measuredTemperatureList.add(new TemperatureF(element));
- }
- else if (element.charAt(element.length()-1) == 'C'){
- measuredTemperatureList.add(new TemperatureC(element));
- }
- }
- );
- return new TemperatureInADay(day,measuredTemperatureList);
- }
- public String toString(char CF) {
- // [ден]: Count: [вк. мерења - 3 места] Min: [мин. температура] Max: [макс. температура] Avg: [просек ]
- DoubleSummaryStatistics dss = measuredTemperatureList.stream().mapToDouble(x -> {
- if (CF == 'F'){
- return x.getFahrenheit();
- }
- else{
- return x.getCelsius();
- }
- }).summaryStatistics();
- return String.format("%3d: Count:% 4d Min:% 7.2f%c Max:% 7.2f%c Avg:% 7.2f%c", day, dss.getCount(), dss.getMin(), CF, dss.getMax(), CF, dss.getAverage(), CF);
- }
- @Override
- public int compareTo(TemperatureInADay o) {
- return Integer.compare(day,o.day);
- }
- }
- class DailyTemperatures{
- private List<TemperatureInADay> temperatureList;
- DailyTemperatures(){
- temperatureList = new LinkedList<>();
- }
- void readTemperatures(InputStream inputStream){
- BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
- temperatureList = bufferedReader.lines()
- .map(TemperatureInADay::createTemperature)
- .collect(Collectors.toList());
- }
- void writeDailyStats(OutputStream outputStream, char scale){
- PrintWriter printWriter = new PrintWriter(outputStream);
- temperatureList.stream().sorted().forEach(x->System.out.println(x.toString(scale)));
- }
- }
- /**
- * I partial exam 2016
- */
- public class DailyTemperatureTest {
- public static void main(String[] args) {
- DailyTemperatures dailyTemperatures = new DailyTemperatures();
- dailyTemperatures.readTemperatures(System.in);
- System.out.println("=== Daily temperatures in Celsius (C) ===");
- dailyTemperatures.writeDailyStats(System.out, 'C');
- System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
- dailyTemperatures.writeDailyStats(System.out, 'F');
- }
- }
- // Vashiot kod ovde
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement