1. import java.util.ArrayList;
  2. import java.util.List;
  3. class DataAggregator {
  4. /**
  5. * Aggregates values from a list of datasets.
  6. *
  7. * @param datasets A list of datasets, where each dataset is a list of numbers.
  8. * @return A list containing the aggregated values (sum of each corresponding element).
  9. * Returns an empty list if the input is null or empty.
  10. * Returns null if datasets have different lengths.
  11. */
  12. public static List<Double> aggregateDatasets(List<List<Double>> datasets) {
  13. if (datasets == null || datasets.isEmpty()) {
  14. return new ArrayList<>(); // Return empty list for null or empty input
  15. }
  16. int numDatasets = datasets.size();
  17. int datasetLength = datasets.get(0).size();
  18. // Check if all datasets have the same length
  19. for (List<Double> dataset : datasets) {
  20. if (dataset.size() != datasetLength) {
  21. return null; // Return null if datasets have different lengths
  22. }
  23. }
  24. List<Double> aggregatedValues = new ArrayList<>(datasetLength); // Initialize with correct size
  25. for (int i = 0; i < datasetLength; i++) {
  26. double sum = 0.0;
  27. for (List<Double> dataset : datasets) {
  28. sum += dataset.get(i); // Sum the values at the same index
  29. }
  30. aggregatedValues.add(sum); // Add the sum to the aggregated list
  31. }
  32. return aggregatedValues;
  33. }
  34. public static void main(String[] args) {
  35. //Example Usage
  36. List<List<Double>> datasets = new ArrayList<>();
  37. datasets.add(List.of(1.0, 2.0, 3.0));
  38. datasets.add(List.of(4.0, 5.0, 6.0));
  39. datasets.add(List.of(7.0, 8.0, 9.0));
  40. List<Double> aggregated = aggregateDatasets(datasets);
  41. if (aggregated != null) {
  42. System.out.println("Aggregated values: " + aggregated); // Output: [12.0, 15.0, 18.0]
  43. } else {
  44. System.out.println("Datasets have different lengths.");
  45. }
  46. // Test case with different lengths
  47. List<List<Double>> datasets2 = new ArrayList<>();
  48. datasets2.add(List.of(1.0, 2.0));
  49. datasets2.add(List.of(3.0, 4.0, 5.0));
  50. List<Double> aggregated2 = aggregateDatasets(datasets2);
  51. if (aggregated2 == null) {
  52. System.out.println("Datasets have different lengths.");
  53. }
  54. //Test with empty list
  55. List<List<Double>> datasets3 = new ArrayList<>();
  56. List<Double> aggregated3 = aggregateDatasets(datasets3);
  57. System.out.println("Aggregated values (empty list): " + aggregated3); //Output: []
  58. }
  59. }

Add your comment