Reputation: 2472
In an application we have a Boarding table having ( boarding_id + invoice_no + item_id ) as key. A Boarding_tmp table with same table structure as Boarding. We are loading Boarding_tmp from a csv file (pipe separator column values)
We have a Boarding java bean with all columns. Let's say we have two list -
1. boardingList with all active records in Boarding table
2. boardingTmpList with all records in Boarding_Tmp table
I need to compare these two list to implement below scenario -
We Need to compare Boarding table with Boarding_tmp table and need to do following (No SQL joins. We have to perform this on object level) -
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)
Here in 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;
}
}
Please help. Thanks.
Upvotes: 0
Views: 4062
Reputation: 2323
You should be able to do the following:
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
Assuming your equality tests work, this should yield correct results.
NOTE: You will have to override the equals
method for this to work properly.
Upvotes: 0
Reputation: 5147
That's easily achivable with use of List#retainAll
method.
javadoc is here
Upvotes: 0
Reputation: 2452
You can try Collections Util library. They have very useful methods for the scenario you depicted.
Upvotes: 1