比较2个数据集合,对比出哪些数据是新增,哪些是修改,哪些是删除

在拉取同步第三方数据时蛮有用的
用于比较的类:

//T为实体类时需要重写hashCode和equals方法
public class NewOldComparer<T> {

	private List<T> insertIds = new ArrayList<T>();

	private List<T> updateIds = new ArrayList<T>();

	private List<T> deleteIds = new ArrayList<T>();
	
	public NewOldComparer(List<T> newIds, List<T> oldIds) {
		if (null != newIds && newIds.size() > 0) {
			hasNewIds(newIds, oldIds);
		} else {
			noHasNewIds(oldIds);
		}
	}

	public List<T> insertIds() {
		return insertIds;
	}

	public List<T> updateIds() {
		return updateIds;
	}

	public List<T> deleteIds() {
		return deleteIds;
	}

	private void hasNewIds(List<T> newIds, List<T> oldIds) {
		if (oldIds.size() == 0) {
			this.insertIds = newIds;
		} else {
			for (T newId : newIds) {
				if (!oldIds.contains(newId)) {
					this.insertIds.add(newId);
				} else {
					this.updateIds.add(newId);
				}
			}
			for (T oldId : oldIds) {
				if (!newIds.contains(oldId)) {
					this.deleteIds.add(oldId);
				}
			}
		}
	}

	private void noHasNewIds(List<T> oldIds) {
		if (null != oldIds && oldIds.size() > 0) {
			this.deleteIds = oldIds;
		}
	}

}

使用示例:

public static void main(String[] args) {
		//数据库存在的id
		List<String> oldIds = Arrays.asList("1", "2", "3");
		//页面传入的新id
		List<String> newIds = Arrays.asList("3", "4", "5");
		NewOldComparer<String> comparer = new NewOldComparer<>(newIds, oldIds);
		System.out.println("需要新增的id有-->" + comparer.insertIds());
		System.out.println("需要修改的id有-->" + comparer.updateIds());
		System.out.println("需要删除的id有-->" + comparer.deleteIds());
	}
console:
需要新增的id有-->[4, 5]
需要修改的id有-->[3]
需要删除的id有-->[1, 2]

你可能感兴趣的:(集合操作,java,list,java)