Поскольку у меня есть база разработчиков для хранилища данных, я пытаюсь понять, следует ли предварительно вычислять производные значения. У меня 1000 рядов данных с одним столбцом. Я помещал их в список. Я должен вычислить дополнительное поле и сортировать эту коллекцию на основе вычисленного поля соответственно. Так вы бы использовали DataRowPrecalculated или DataRow как POJO? Имеет смысл предварительно просчитать столбцы в хранилище данных, но я не уверен, имеет ли смысл в java-объектах. Ниже приведен вид псевдокода, но вы должны получить эту идею. Использование сценария2 У меня есть грязный цикл forEach. Похоже, что сценарий1 делает мой код намного проще, потому что объект 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