0

アセット POJO があります。

public class Asset implements Serializable {
    //serialVersionUID 
    private String quarter;
    private String assetType;
    private BigDecimal assetAttributes;
// more assetAttributes like price, etc, getters and setters
}

次に、この POJO と Apache POI シートのリストを取得し、リストの内容をシートに書き込むこのメソッドがあります。

public void addContent (List<Asset> listOfAsset, Sheet sheet) {
    //make a row counter and a cell counter
    SortedSet<String> quarters = new TreeSet<String>();
    for (Asset asset : listOfAsset) {
      quarters.add(asset.getQuarter());
      //write content to sheet
      row.createCell().setCellValue();
    }
    addSubtotals();
}

次に、必要な情報を取得して SUMIF 式を実行する addSubtotals メソッドがあります。

private void addSubtotals (//params) {
    for (String s : quarters) {
      Row row = sheet.createRow(rowCounter++);
      row.createCell(0).setCellValue(// quarter);
      for (int i = 2; i < cellCounter; i++) {
        row.createCell(i).setCellFormula(
        "SUMIF(// if the printed quarter equals the one in the quarters set, 
            then add all the attributes for all asset types)");
      }
   }
}

小計がすべてリストの一番下にあることを除いて、それはすべて正常に機能しています。四半期ごとに小計を計算するにはどうすればよいですか? 四半期がいくつになるか、または各四半期にいくつの資産タイプが存在するかは、前もってわかりません。

コンテンツを追加する for ループに小計メソッドを入れようと思ったのですが、四半期数やアセットの種類が不明で SUMIF ができません。TreeMap を実行できる可能性がありますが、詳細についてはわかりません。

4

1 に答える 1

1

アセット pojo を事前に分類する必要がある場合があります。資産タイプから資産への四半期のマップを表す Map (String, Map(String, Asset)) を作成する必要があります。次に、3 ネストされたループを使用して、各四半期をループし、次にその四半期内の各アセット タイプをループし、次に各アセットをループします。順序が重要な場合は、ツリーマップの実装を使用してください。このようにすると、資産タイプまたは四半期の終わりに達したときに何か特別なことを行うことができ、ループ自体でローカル変数を使用して合計を追跡することもできます。

于 2013-09-25T18:28:24.027 に答える