import java.util.ArrayList;
import java.util.List;
class DataAggregator {
/**
* Aggregates values from a list of datasets.
*
* @param datasets A list of datasets, where each dataset is a list of numbers.
* @return A list containing the aggregated values (sum of each corresponding element).
* Returns an empty list if the input is null or empty.
* Returns null if datasets have different lengths.
*/
public static List<Double> aggregateDatasets(List<List<Double>> datasets) {
if (datasets == null || datasets.isEmpty()) {
return new ArrayList<>(); // Return empty list for null or empty input
}
int numDatasets = datasets.size();
int datasetLength = datasets.get(0).size();
// Check if all datasets have the same length
for (List<Double> dataset : datasets) {
if (dataset.size() != datasetLength) {
return null; // Return null if datasets have different lengths
}
}
List<Double> aggregatedValues = new ArrayList<>(datasetLength); // Initialize with correct size
for (int i = 0; i < datasetLength; i++) {
double sum = 0.0;
for (List<Double> dataset : datasets) {
sum += dataset.get(i); // Sum the values at the same index
}
aggregatedValues.add(sum); // Add the sum to the aggregated list
}
return aggregatedValues;
}
public static void main(String[] args) {
//Example Usage
List<List<Double>> datasets = new ArrayList<>();
datasets.add(List.of(1.0, 2.0, 3.0));
datasets.add(List.of(4.0, 5.0, 6.0));
datasets.add(List.of(7.0, 8.0, 9.0));
List<Double> aggregated = aggregateDatasets(datasets);
if (aggregated != null) {
System.out.println("Aggregated values: " + aggregated); // Output: [12.0, 15.0, 18.0]
} else {
System.out.println("Datasets have different lengths.");
}
// Test case with different lengths
List<List<Double>> datasets2 = new ArrayList<>();
datasets2.add(List.of(1.0, 2.0));
datasets2.add(List.of(3.0, 4.0, 5.0));
List<Double> aggregated2 = aggregateDatasets(datasets2);
if (aggregated2 == null) {
System.out.println("Datasets have different lengths.");
}
//Test with empty list
List<List<Double>> datasets3 = new ArrayList<>();
List<Double> aggregated3 = aggregateDatasets(datasets3);
System.out.println("Aggregated values (empty list): " + aggregated3); //Output: []
}
}
Add your comment