, , , :
Earthquake:
public class Earthquake {
private final String obsname;
private final float magnitude;
public Earthquake(String obsname, float magnitude) {
this.obsname = obsname;
this.magnitude = magnitude;
}
public float getMagnitude() {
return magnitude;
}
public String getObsname() {
return obsname;
}
}
:
public class Observatory {
private final String obsname;
public Observatory(String obsname) {
this.obsname = obsname;
}
public String getObsname() {
return obsname;
}
@Override
public String toString() {
return obsname;
}
}
, :
public static float findAverageMagnitude(List<Earthquake> earthquakes) {
float total = 0.0f;
for(Earthquake earthquake : earthquakes) {
total += earthquake.getMagnitude();
}
return total / earthquakes.size();
}
, , , :
public static Map<String, List<Earthquake>> mapQuakeToObs(
List<Observatory> obsList, List<Earthquake> quakes) {
Map<String, List<Earthquake>> obsAndQuakes =
new HashMap<String, List<Earthquake>>();
for(Earthquake quake : quakes) {
for (Observatory obs : obsList) {
if (obs.getObsname().equals(quake.getObsname())) {
List<Earthquake> quakesMappedToObs = null;
if(!obsAndQuakes.containsKey(obs.getObsname())) {
quakesMappedToObs = new ArrayList<Earthquake>();
obsAndQuakes.put(obs.getObsname(), quakesMappedToObs);
} else {
quakesMappedToObs = obsAndQuakes.get(obs.getObsname());
}
quakesMappedToObs.add(quake);
}
}
}
return obsAndQuakes;
}
, , , , :
public static Observatory findObservatoryWithHighestAverageMagnitude(
List<Observatory> observatories, List<Earthquake> earthquakes) {
float highestRecordedAverage = 0.0f;
String obsnameWithHighestRecordedAverage = null;
Map<String, List<Earthquake>> obsAndQuakes
= mapQuakeToObs(observatories, earthquakes);
for(String obsName: obsAndQuakes.keySet()) {
List<Earthquake> quakesMappedToObs = obsAndQuakes.get(obsName);
float averageMagnitude = findAverageMagnitude(quakesMappedToObs);
if(averageMagnitude > highestRecordedAverage) {
highestRecordedAverage = averageMagnitude;
obsnameWithHighestRecordedAverage = obsName;
}
}
for(Observatory observatory : observatories) {
if(observatory.getObsname().equals(obsnameWithHighestRecordedAverage)) {
return observatory;
}
}
return null;
}
:
public static void main(String[] args) {
Observatory observatory1 = new Observatory("Observatory One");
Observatory observatory2 = new Observatory("Observatory Two");
Earthquake quake1a = new Earthquake("Observatory One", 0.1f);
Earthquake quake1b = new Earthquake("Observatory One", 7.9f);
Earthquake quake1c = new Earthquake("Observatory One", 8.3f);
Earthquake quake2a = new Earthquake("Observatory Two", 3.2f);
Earthquake quake2b = new Earthquake("Observatory Two", 2.9f);
Earthquake quake2c = new Earthquake("Observatory Two", 4.7f);
List<Observatory> observatories = new ArrayList<Observatory>();
observatories.add(observatory1);
observatories.add(observatory2);
List<Earthquake> earthquakes = new ArrayList<Earthquake>();
earthquakes.add(quake1a);
earthquakes.add(quake1b);
earthquakes.add(quake1c);
earthquakes.add(quake2a);
earthquakes.add(quake2b);
earthquakes.add(quake2c);
System.out.println(findObservatoryWithHighestAverageMagnitude(
observatories, earthquakes));
}