【问题标题】:How to compare two list of different size and return common records from both the list...in java [duplicate]java - 如何比较两个不同大小的列表并从两个列表中返回公共记录...在java中[重复]
【发布时间】:2017-01-17 05:30:04
【问题描述】:

这是代码。如何比较两个不同大小的列表并从两个列表中返回共同的记录......在java中

for (Bean1 obj1 : list1) {
    for (Bean2 obj2 : list2) {
        if (obj1.getNum1().equals(obj2.getNum2())) {
        }
        else {
        }
    }
}

【问题讨论】:

标签: java


【解决方案1】:

您可以将它们保存到一个新列表中,其泛型是 Bean1Bean2 的超类,例如 Object

List<Object> list = new ArrayList<Object>();
for (Bean1 obj1 : list1) {
for (Bean2 obj2 : list2) {
    if (obj1.getNum1().equals(obj2.getNum2())) {
            list .add(obj1);
     }
 }
}

【讨论】:

  • 这有关系吗?
【解决方案2】:

假设 Bean1 和 Bean2 包含 String 类型的 num1 和 num2,请尝试以下示例:

public static void main(String[] args) {
    List<Bean1> list1 = new ArrayList<Bean1>();
    List<Bean2> list2 = new ArrayList<Bean2>();
    List<Object> list3 = new ArrayList<Object>();

    Bean1 bean1 = new Bean1();
    Bean1 bean11 = new Bean1();
    Bean1 bean12 = new Bean1();

    Bean2 bean2 = new Bean2();
    Bean2 bean21 = new Bean2();
    Bean2 bean22 = new Bean2();
    Bean2 bean23 = new Bean2();

    bean1.setNum1("a");
    list1.add(bean1);
    bean11.setNum1("b");
    list1.add(bean11);
    bean12.setNum1("c");
    list1.add(bean12);

    bean2.setNum2("a");
    list2.add(bean2);
    bean21.setNum2("d");
    list2.add(bean21);
    bean22.setNum2("e");
    list2.add(bean22);
    bean23.setNum2("b");
    list2.add(bean23);

    for (Bean1 ben1 : list1) {
        for (Bean2 ben2 : list2) {
            if (ben1.getNum1().equals(ben2.getNum2())) {
                list3.add(ben1.getNum1());
            }
        }
    }

    for (Object obj : list3) {
        System.out.println(obj);
    }
}

【讨论】:

  • if-else 语句中的原因是什么?在这两种情况下,您都有 list1.size() * list2.size() 迭代
  • @Ilya :更正了代码。之前在尝试别的东西。
【解决方案3】:

解决方案在list1.size() + list2.size() 迭代而不是list1.size() * list2.size()

  List intersection = new ArrayList(Math.min(list1.size(), list2.size()));
  Set num2s = new HashSet();
  for (Bean2 bean2 : list2)
  {
     num2s.add(bean2.getName2());
  }

  for (Iterator<Bean1> iter = list1.iterator(); iter.hasNext();) 
  {
     Bean1 bean1 = iter.next();
     if (num2s.contains(bean1.getName1())) 
     {
         intersection.add(bean1);
     }
  }
  // return intersection;

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多