由於我有一個數據倉庫開發人員背景,我試着讓我的頭腦是否應該預先計算派生值。我有1000個數字的一列數據行。我把它們都放在一個列表集合中。我必須計算額外的字段並根據計算字段對此集合進行相應的排序。那麼你會使用DataRowPrecalculated還是DataRow作爲POJO?預先計算數據倉庫中的列是有意義的,但我不確定它在java對象中是否有意義。以下是一些僞代碼,但你應該明白這一點。使用scenario2我有髒forEach循環。看起來,scenario1讓我的代碼變得更容易,因爲DataRowPrecalculated對象利用構造函數隱式地調用setter爲每個數據行設置預先計算的字段。按照數據倉庫的要求預先計算附加的Java對象字段,或者在運行中執行此操作?
public class DataRowPrecalculated {
private int column1;
private double precalculatedColumn1;
public DataRowPrecalculated(int column1) {
this.column1 = column1;
setPrecalculatedColumn1(column1);
}
public int getColumn1() {
return column1;
}
public void setColumn1(int column1) {
this.column1 = column1;
}
public double getPrecalculatedColumn1() {
return precalculatedColumn1;
}
public void setPrecalculatedColumn1(int column1) {
this.precalculatedColumn1 = Math.sin(column1);
}
}
public class DataRow {
private int column1;
public DataRow(int column1) {
this.column1 = column1;
}
public int getColumn1() {
return column1;
}
public void setColumn1(int column1) {
this.column1 = column1;
}
}
public class Main{
public static void main(String[] args) {
scenario1();
scenario2();
}
private static void scenario1(){
List<DataRowPrecalculated> drp = DAO.getDataRowPrecalculated();
Collections.sort(drp, new Comparator<DataRowPrecalculated>() {
//implementation
});
}
private static void scenario2(){
List<DataRow> drp = DAO.getDataRow();
Map<DataRow, Double> map = new HashMap<DataRow, Double>();
for (DataRow dr : drp) {
double precalculatedColumnOnTheFly = Math.sin(drp.getColumn1());
map.put(dr, new Double(precalculatedColumnOnTheFly));
}
Collections.sort(map, new Comparator<DataRow>() {
//implementation
});
}
}
是的,肯定會去私人制定者 – inzzz 2015-02-24 12:42:20