どのように効率的に我々は、Javaのリストから必要な出力を得ることができますか?

灰こと:
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

今私は、次の基準にレコードを持つことになりますつのリストを作成する必要があります。

  1. 各回路の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たオブジェクト

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=197428&siteId=1