问题:
我有两个按属性
排序的不同长度的列表。我需要创建两个具有定义的记录计数并按属性
排序的结果列表。循环 block 中应该有一个条件来验证应将哪条记录添加到结果列表中。
例如,两个列表按 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
block 的情况下迭代这两个列表?
最佳答案
循环直到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++; } }
关于java - 带条件迭代两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49220487/