Java HACKS

Go through progression of understanding a Static Class. Build a purposeful static Class, no Objects.

  • Calculate common operations on a Date field, age since date, older of two dates, number of seconds since date
  • Calculate stats functions on an array of values: mean, median, mode.
// Import statements
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

// Defining public class
public class UtilityClass {
    
    // Static method to calculate age since a given date
    public static int calculateAgeSinceDate(Date birthDate, Date currentDate) {
        long diff = currentDate.getTime() - birthDate.getTime();
        return (int) (diff / (1000L * 60 * 60 * 24 * 365));
    }

    // Static method to find the older of two dates
    public static Date olderDate(Date date1, Date date2) {
        return date1.before(date2) ? date1 : date2;
    }

    // Static method to calculate the number of seconds since a given date
    public static long secondsSinceDate(Date referenceDate, Date currentDate) {
        long diff = currentDate.getTime() - referenceDate.getTime();
        return diff / 1000L;
    }

    // Static method to calculate the mean of an array of values
    public static double calculateMean(double[] values) {
        double sum = 0;
        for (double value : values) {
            sum += value;
        }
        return sum / values.length;
    }

    // Static method to calculate the median of an array of values
    public static double calculateMedian(double[] values) {
        Arrays.sort(values);
        int middle = values.length / 2;
        if (values.length % 2 == 0) {
            return (values[middle - 1] + values[middle]) / 2.0;
        } else {
            return values[middle];
        }
    }

    // Static method to calculate the mode of an array of values
    public static double calculateMode(double[] values) {
        Map<Double, Integer> valueCount = new HashMap<>();
        double mode = 0;
        int maxCount = 0;

        for (double value : values) {
            int count = valueCount.getOrDefault(value, 0) + 1;
            valueCount.put(value, count);
            if (count > maxCount) {
                maxCount = count;
                mode = value;
            }
        }

        return mode;
    }
    
    public static void main(String[] args) {
        // Example usage
        Date birthDate = new Date(90, 0, 1); // January 1, 1990
        Date currentDate = new Date(); // Current date

        int age = calculateAgeSinceDate(birthDate, currentDate);
        Date older = olderDate(birthDate, currentDate);
        long seconds = secondsSinceDate(birthDate, currentDate);

        double[] data = { 5.2, 3.7, 8.6, 2.1, 5.2, 7.9, 8.6, 3.7, 7.9 };
        double mean = calculateMean(data);
        double median = calculateMedian(data);
        double mode = calculateMode(data);

        // Print results
        System.out.println("Age: " + age);
        System.out.println("Older Date: " + older);
        System.out.println("Seconds since Date: " + seconds);
        System.out.println("Mean: " + mean);
        System.out.println("Median: " + median);
        System.out.println("Mode: " + mode);
    }
}

UtilityClass.main(new String[]{});

Age: 33
Older Date: Mon Jan 01 00:00:00 PST 1990
Seconds since Date: 1061800189
Mean: 5.877777777777778
Median: 5.2
Mode: 3.7

This code defines a UtilityClass with static methods for performing common date and statistics operations. It includes examples of how to use these methods in the main method at the end of the class.