0

アプリケーションには、(boarding_id + invoice_no + item_id)をキーとして持つBoardingテーブルがあります。Boardingと同じテーブル構造を持つBoarding_tmpテーブル。csvファイルからBoarding_tmpをロードしています(パイプ区切り文字の列の値)

すべての列を持つBoardingJavaBeanがあります。2つのリストがあるとしましょう-

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

以下のシナリオを実装するには、これら2つのリストを比較する必要があります-

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

CollectionsUtilライブラリを試すことができます。彼らはあなたが描いたシナリオのための非常に便利な方法を持っています。

于 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 に答える