0

在一个应用程序中,我们有一个以 ( board_id + invoice_no + item_id ) 作为键的登机表。与 Boarding 具有相同表结构的 Boarding_tmp 表。我们正在从 csv 文件(管道分隔符列值)加载 Boarding_tmp

我们有一个包含所有列的 Boarding Java bean。假设我们有两个列表 -

1. boardingList with all active records in Boarding table
2. boardingTmpList with all records in Boarding_Tmp table

我需要比较这两个列表来实现以下场景 -

我们需要将 Boarding 表与 Boarding_tmp 表进行比较,并且需要执行以下操作(没有 SQL 连接。我们必须在对象级别执行此操作) -

a. All records which are in Boarding_tmp but not in Boarding table should be inserted in Boarding table (means they are new records)
b. All records which are in Boarding but not in Boarding_tmp table should be mark as deactivated in Boarding table (we have a active column in Boarding table)

在 Boarding.java 中 -

public class Boarding implements Comparable {

    private String bordingId;
    private String itemId;
    private String invoiceNo;
    private String itemName;
    private long qty;
    private double price;

    /**
     * @return the bordingId
     */
    public String getBordingId() {
        return bordingId;
    }

    /**
     * @param bordingId
     *            the bordingId to set
     */
    public void setBordingId(String bordingId) {
        this.bordingId = bordingId;
    }

    /**
     * @return the itemId
     */
    public String getItemId() {
        return itemId;
    }

    /**
     * @param itemId
     *            the itemId to set
     */
    public void setItemId(String itemId) {
        this.itemId = itemId;
    }

    /**
     * @return the invoiceNo
     */
    public String getInvoiceNo() {
        return invoiceNo;
    }

    /**
     * @param invoiceNo
     *            the invoiceNo to set
     */
    public void setInvoiceNo(String invoiceNo) {
        this.invoiceNo = invoiceNo;
    }

    /**
     * @return the itemName
     */
    public String getItemName() {
        return itemName;
    }

    /**
     * @param itemName
     *            the itemName to set
     */
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    /**
     * @return the qty
     */
    public long getQty() {
        return qty;
    }

    /**
     * @param qty
     *            the qty to set
     */
    public void setQty(long qty) {
        this.qty = qty;
    }

    /**
     * @return the price
     */
    public double getPrice() {
        return price;
    }

    /**
     * @param price
     *            the price to set
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((bordingId == null) ? 0 : bordingId.hashCode());
        result = prime * result
                + ((invoiceNo == null) ? 0 : invoiceNo.hashCode());
        result = prime * result + ((itemId == null) ? 0 : itemId.hashCode());
        return result;
    }

    @Override
    public int compareTo(Object o) {
        if (this == o) {
            return 0;
        }
        if (o == null) {
            return 1;
        }
        if (getClass() != o.getClass()) {
            return 1;
        }
        Boarding other = (Boarding) o;
        if (bordingId == null) {
            if (other.bordingId != null) {
                return 1;
            }
        } else if (!bordingId.equals(other.bordingId)) {
            return 1;
        }
        if (invoiceNo == null) {
            if (other.invoiceNo != null) {
                return 1;
            }
        } else if (!invoiceNo.equals(other.invoiceNo)) {
            return 1;
        }
        if (itemId == null) {
            if (other.itemId != null) {
                return 1;
            }
        } else if (!itemId.equals(other.itemId)) {
            return 1;
        }

        return 0;
    }

}

请帮忙。谢谢。

4

3 回答 3

1

您可以尝试Collections Util库。他们为您描述的场景提供了非常有用的方法。

于 2013-01-14T11:36:29.517 回答
0

您应该能够执行以下操作:

List<Boarding> insertBoarding = new ArrayList(boardingTmpList);
insertBoarding.removeAll(boardingList);
// insert all elements in insertBoarding to the table
List<Boarding> deactivateBoarding = new ArrayList(boardingList);
deactivateBoarding.removeAll(boardingTmpList);
// deactivate all elements in deactivateBoarding in the table

假设您的平等测试有效,这应该会产生正确的结果。

注意:您必须重写该equals方法才能使其正常工作。

于 2013-01-14T11:35:47.917 回答
0

这很容易通过使用List#retainAll方法来实现。

javadoc在这里

于 2013-01-14T11:37:29.893 回答