package com.github.ryhmrt.mssqldiff.differ; import java.util.ArrayList; import java.util.List; import com.github.ryhmrt.mssqldiff.data.Diff; public class ListDiffer<DATA, DIFF extends Diff<DATA>, DIFFER extends AbstractDiffer<DATA, DIFF>> { public List<DIFF> diff(DIFFER differ, List<DATA> fromList, List<DATA> toList) { ArrayList<DIFF> result = new ArrayList<DIFF>(); for (DATA to : toList) { if (fromList.contains(to)) continue; DIFF diff = differ.diff(null, to); if (diff != null && diff.getType() != Diff.Type.EQUAL) result.add(diff); } for (DATA to : toList) { if (!fromList.contains(to)) continue; DIFF diff = differ.diff(fromList.get(fromList.indexOf(to)), to); if (diff != null && diff.getType() != Diff.Type.EQUAL) result.add(diff); } for (DATA from : fromList) { if (toList.contains(from)) continue; DIFF diff = differ.diff(from, null); if (diff != null && diff.getType() != Diff.Type.EQUAL) result.add(diff); } return result; } }