问题:
我有两个按property
列表排序,长度不同。我需要创建两个结果列表,其中包含已定义的记录数,并按property
排序。循环块中应该有一个条件来验证应该将哪个记录添加到结果列表中。
例如,在date
顺序中按DESC
属性排序的两个列表:
list1: [{'1', '13:45:55', 'List1Title1'}, {'2', '13:40:50', 'List1Title2'}]
list2: [{'1', '13:50:55', 'List2Title1'}, {'2', '13:35:50', 'List2Title2'}]
对于count = 3,结果应如下所示:
resultList1: [{'1', '13:45:55', 'List1Title1'}, {'2', '13:40:50', 'List1Title2'}]
resultList2: [{'1', '13:50:55', 'List2Title1'}]
我已尝试在已知循环计数的for...
的帮助下迭代列表:
List<Tx> list1 = ...;
List<Tx> list2 = ...;
int list1Index = 0;
int list2Index = 0;
for (int i = 0; i < count; i++) {
if (list1.get(list1Index).getDate() > list2.get(list2Index).getDate()) {
resultList1.add(list1.get(list1Index));
++list1Index;
} else {
resultList2.add(list2.get(list2Index));
++list2Index;
}
}
但是,对于列表大小不同甚至是空的情况,此实现不能保存。
是否有可能在没有大量if/elseif
块的情况下迭代这两个列表?
答案 0 :(得分:1)
您可以添加for
条件检查列表中是否还有其他元素
for (int i = 0; i < count && i < list1.size() && i < list2.size(); i++) {
\\ code here
}
再添加两个for循环来处理残羹剩饭
for (int i = 0; i < count && i < list1.size(); i++) {
resultList1.add(list1.get(list1Index));
++list1Index;
}
for (int i = 0; i < count && i < list2.size(); i++) {
resultList2.add(list2.get(list2Index));
++list2Index;
}
只有在剩下任何元素的情况下才会执行这些循环。
答案 1 :(得分:1)
循环直到selected == count
或list1
和list2
都已遍历。
在循环中,
list1
或list2
,则只考虑左侧
之一。如果没有,请比较它们并确定应增加哪个索引。
int selected = 0;
for (int list1Index = 0, list2Index = 0;
selected < count && (list1Index < list1.size() || list2Index < list2.size());
selected++) {
if (list1Index == list1.size()) {
resultList2.add(list2.get(list2Index));
list2Index++;
} else if (list2Index == list2.size()) {
resultList1.add(list1.get(list1Index));
list1Index++;
} else if (list1.get(list1Index).getDate() > list2.get(list2Index).getDate()) {
resultList1.add(list1.get(list1Index));
list1Index++;
} else {
resultList2.add(list2.get(list2Index));
list2Index++;
}
}