灰こと:
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
今私は、次の基準にレコードを持つことになりますつのリストを作成する必要があります。
- 各回路のIDで、私は最高の時間を持つレコードを取得する必要がありますが、重複した時間がより存在している場合、私は電気部門で1を取る必要があります。
上記の結果についての結果は以下のようにする必要があります:
Circuit A Electricity 70
Circuit B Electricity 80
Circuit C Hydel 50
私はどのように効果的とJava 8 / Javaを使用して、最終的なリストを取得するための最も効率的な方法では、私繰り返すことができます知ってみましょう。
私が書いたコードは、完全にすべての作業ではなく、私のapprochを以下に示しました。
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
回路クラスは、この3つのオブジェクトのゲッターセッターとPOJOのオブジェクトを持っています。
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;
}
マップのキーがどこにあるマップを作成circuitID
し、値がCircuit
「最大時間」の要件を満たしているオブジェクト。リストの要素を反復して、新たな「最大時間」を保存するためにそれに応じてマップを更新しCircuit
たオブジェクト