比较java中的2个列表

时间:2014-02-06 19:13:01

标签: java collections arraylist

我从两个不同的数据库中获取数据并将它们存储在java.util.List

Elements of database:1 
column 1                   column 2
**Investment Number**     Investment Name
123                         abcwe
124                         agsdf
454                         lkjcv
784                         ojncv
478                         hfdgh
852                         qweyu
745                         mmkty
201                         pbckl
560                         jklfg
741                         nbvbn 

将它们存储在list1

数据库元素:2

column 1                   column 2
Investment Number     Property Number
123                         548
980                         743
454                         200
350                         357
478                         698
852                         223
745                         795
784                         213
341                         022
741                         900

将它们存储在list2中

如果list2中可用的list1的投资数量需要保留并丢弃其他人,则需要根据投资数字进行比较。

谢谢,

3 个答案:

答案 0 :(得分:3)

如果您有两个列表,则可以执行以下操作:

List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 5, 6, 7));
List<Integer> list2 = new ArrayList<>(Arrays.asList(5, 6, 7, 8, 9));
list1.retainAll(list2);
System.out.println("list1 = " + list1);

结果将是:

list1 = [5, 6, 7]

答案 1 :(得分:2)

为您的两个类创建一个包装类,并使用List.retainAll()。 这是一些代码

你已经拥有与Blam和Hoot相同的类; 它们包含在内以便完整

public class Blam
{
    private String investmentNumber;
    private String investmentName;

    ... getters and setters
}

public class Hoot
{
    private String investmentNumber;
    private String propertyNumber;

    ... getters and setters
}

public class Wrapper
{
    private Blam blam;
    private Hoot hoot;

    public Wrapper(final Blam blam)
    {
        this.blam = blam;
    }

    public Wrapper(final Hoot hoot)
    {
        this.hoot = hoot;
    }

    public boolean equals(Object oThat)
    {
        if (this == oThat)
        {
            return true;
        }

        if (oThat instanceof Wrapper)
        {
            Wrapper wThat = (Wrapper)oThat;
            String myInvestmentNumber;
            String yourInvestmentNumber;

            if (blam != null)
            {
                myInvestmentNumber = blam.getInvestmentNumber();
            }
            else
            {
                myInvestmentNumber = hoot.getInvestmentNumber();
            }

            if (wThat.blam != null)
            {
                yourInvestmentNumber = wThat.blam.getInvestmentNumber();
            }
            else
            {
                yourInvestmentNumber = wThat.hoot.getInvestmentNumber();
            }

            return StringUtils.equals(myInvestmentNumber, yourInvestmentNumber);
        }

        return false;
    }

    public int hashCode()
    {
        ... implement this using blam and hoot as in equals() above.
    }

            ... getters for Hoot and Blam values as needed.
}


    List<Wrapper> listOne = new ArrayList<Wrapper>();
    List<Wrapper> listTwo = new ArrayList<Wrapper>();

    ... populate listOne with wrapped Blam values.
    ... populate listTwo with wrapped Hoot values.

    listTwo.retainAll(listOne);

执行retainAll后,Hoot列表包含数据库2中数据库1中有相应条目的所有值。

注意:StringUtils是一个apache commons lang类,它执行null safe equals(和其他东西)。

答案 2 :(得分:0)

假设您有两个pojos对应于两个不同数据库的两个不同表

Pojo1 -------实体类对应第一个数据库的第一个表

Pojo2 -------实体类与第二个数据库的第二个表相对应

 List<Pojo1> listOne = new ArrayList<Pojo1>();
  List<Pojo2> listTwo = new ArrayList<Pojo2>();
   listTwo.retainAll(listOne);

请注意,在这两个pojos中你必须覆盖Object类的hashcode()和equals()方法,因为在retainAll中,你要比较两个pojos的对象