我遇到了问题,并没有在这里提出逻辑,希望你们能帮助我。有人在stackoverflow上问了同样的问题,我无法找到链接,它与发布的查询非常相似
我生成一份报告,用户根据该报告选择日期/日期 值将从数据库中获取并显示在报告中。 Apache poi用于生成excel报告。
我有4个字段/列
ID Date true/false someaction
如果用户只选择一个或多个日期,程序将获取所有日期并将它们存储在Arraylist中,然后迭代它以将数据存储在数据库中所选日期
伪代码
String checkLastCell = null;
for (Date listOfdates : datesL){
//query gets fired to the database by sending listOfdates as a parameter
for ( T tt : t) {
i = tt.getId(); //ID
j = tt.getDate(); //Date
k = tt.getTrueFalse(); // truefalse
and setting them on cells
for column l , i am writing some action based on the
l= Yes or No //someaction Yes or No
对于Id = 1,如果在truefalse列中设置了True,我需要在Someaction列中写入Yes
在下一次迭代中,如果id = 2,并且在truefalse列中设置了False,我将在某个行列中写入No,
如果在下一次迭代中,Id = 1并且在truefalse列中设置了False,我需要检查ID = 1的上一个操作,然后编写操作 - >否(因为它从True变为False)
if(lastcell是Null&& t.getTrueFalse()。equals(“true”)|| lastcell是 不是空的&& t.getTrueFalse()。等于( “真”)) if if(lastcell是Null&& t.getTrueFalse()。equals(“false”)|| lastcell不是null&& t.getTrueFalse()。equals(“false”)){设置 行动为NO} .....这里需要写一些逻辑。
i++; // increment the row } } }
我在撰写伪代码/算法时需要建议/帮助
答案 0 :(得分:0)
您只需要一个HashMap(java)来保存包含ID的最后一行的索引。这是算法/实现。
List<Row> dbResults = getDatabaseResults(listOfDates);
HashMap<int, int> idToLastIndex = new HashMap<int, int>();
for(int x=0; x<dbResults.size(); x++) {
// values
i = dbResults[x].getID();
j = dbResults[x].getDate();
k = dbResults[x].getTrueFalse();
// get action value
if(idToIndex.containsKey(i) && k == dbResults.get(idToLastIndex.get(i)).getTrueFalse()) {
// if there's an old value and it equals the new one
a = "NO ACTION TAKEN";
} else if(k == true) {
a = "YES";
} else {
a = "NO";
}
idToLastIndex.put(i, x); // ID->Index
}
注意以上代码是在Web浏览器中编写的,未经过测试,可能存在语法错误。