cendres:
CircuitID Department Hours
--------------------------------
Circuit A Electricity 60
Circuit A Hydel 70
Circuit B Hydel 30
Circuit C Electricity 40
Circuit B Electricity 80
Circuit C Hydel 50
Circuit A Electricity 70
Maintenant, je dois créer une liste qui aura des dossiers sur les critères suivants:
- Dans chaque identifiant de circuit que je dois obtenir le record avec plus des heures, mais si les heures en double sont présentes que je dois prendre celui avec le service d'électricité.
Résultat pour le résultat ci-dessus devrait être comme ci-dessous:
Circuit A Electricity 70
Circuit B Electricity 80
Circuit C Hydel 50
Permettez-moi de savoir comment je peux itérer efficacement et plus moyen efficace pour obtenir la liste finale à l'aide java 8 / java.
Le code i écrit est pas du tout fonctionne parfaitement et mon approch a été montré ci-dessous:
for (int i = 0; i < circuitList.size(); i++) {
for (int j = 0; j < circuitList.size(); {
if (circuitList.get(i).getCircuitId().equals(circuitList.get(j).getCircuitId()) && i != j) {
if (circuitList().get(i).getHours() == circuitList().get(j).getHours()) {
if (circuitList().get(i).getDepartment().equals(“Electricity”) {
newList.add(circuitList().get(i));
}
// some more conditions on getHours
classe circuit est d'avoir des objets POJO avec setters getter de ces trois objets.
public class Circuit {
String circuitID;
int hours;
String department;
}
Sero:
public static Map<String, Circuit> getMaxHours(final List<Circuit> circuitsList) {
final Map<String, Circuit> mappedCircuitsById = new HashMap<String, Circuit>();
for (final Circuit circuit : circuitsList) {
if (!mappedCircuitsById.containsKey(circuit.getCircuitID())) {
mappedCircuitsById.put(circuit.getCircuitID(), circuit);
} else {
final Circuit existingMax = mappedCircuitsById.get(circuit.getCircuitID());
if (circuit.getHours() > existingMax.getHours()) mappedCircuitsById.put(circuit.getCircuitID(), circuit);
else if (circuit.getHours() == existingMax.getHours()) {
if (circuit.getDepartment().equals("Electricity")) mappedCircuitsById.put(circuit.getCircuitID(), circuit);
else if (existingMax.getDepartment().equals("Electricity")) mappedCircuitsById.put(circuit.getCircuitID(), existingMax);
}
}
}
return mappedCircuitsById;
}
Créer une carte où la clé de la carte est circuitID
et la valeur est l' Circuit
objet qui répond aux exigences « heures max ». Itérer sur les éléments de la liste et mettre à jour la carte en conséquence pour stocker les nouvelles « heures max » Circuit
objet