java - 带条件迭代两个列表

标签 java list

问题:

我有两个按属性排序的不同长度的列表。我需要创建两个具有定义的记录计数并按属性排序的结果列表。循环 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或者list1list2都被遍历。

在循环中,

  • 如果list1list2已经遍历过了,那么只考虑左边 一个。
  • 如果不是,请比较它们并确定应增加哪个索引。

    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/

相关文章:

Java 正则表达式查找 x 个字符内的匹配项

java - SoapFault 异常 : [HTTP] Unsupported Media Type when accessing Java web-service from PHP

java - 排序列表后,如何将列表中的对象取回它们原来的位置?

r - 根据其他列表 R 提取列表的值

python - 用 DICT python 中的单词替换精确数字

java - 编写一个 Java 方法来确定是否有任何一对学生拥有相同的类(class)

java - 程序编译时如何打印堆栈跟踪?

R:根据列名称和模式提取列表列

python - 如果不同数据帧的项目相等但尊重 Pandas 的条件,则打印值

java - 什么时候需要用到Mockito的verify方法?