All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unidal.helper.Lists Maven / Gradle / Ivy

The newest version!
package org.unidal.helper;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class Lists {
	public static  List intersection(List list1, List list2, Factor factor) {
		List result = new ArrayList();
		List ids = new ArrayList(list2.size());

		for (T e : list2) {
			ids.add(factor.getId(e));
		}

		for (int i = 0; i < list1.size(); i++) {
			T item = list1.get(i);
			Object id = factor.getId(item);
			int index = ids.indexOf(id);

			if (index >= 0) {
				result.add(factor.merge(item, list2.get(index)));
			}
		}

		return result;
	}

	public static  Segregation segregate(List newList, List oldList, Factor factor) {
		Segregation result = new Segregation();

		segregate(newList, oldList, result.getInsert(), result.getUpdate(), result.getDelete(), factor);
		return result;
	}

	public static  void segregate(List newList, List oldList, List insert, List update, List delete,
			Factor factor) {
		List oldIds = new ArrayList(oldList.size());

		for (T e : oldList) {
			oldIds.add(factor.getId(e));
		}

		delete.addAll(oldList);

		for (T newItem : newList) {
			Object id = factor.getId(newItem);
			int index = oldIds.indexOf(id);

			if (index < 0) {
				insert.add(newItem);
			} else {
				T oldItem = delete.remove(index);

				oldIds.remove(index);

				if (update != null) {
					update.add(factor.merge(newItem, oldItem));
				}
			}
		}
	}

	public static class Segregation {
		private List m_insert = new ArrayList();

		private List m_delete = new ArrayList();

		private List m_update = new ArrayList();

		public List getInsert() {
			return m_insert;
		}

		public List getDelete() {
			return m_delete;
		}

		public List getUpdate() {
			return m_update;
		}
	}

	@SuppressWarnings("unchecked")
	public static  T[] toArray(Class componentType, List list) {
		T[] array = (T[]) Array.newInstance(componentType, list.size());

		return list.toArray(array);
	}
	
	@SuppressWarnings("unchecked")
	public static  T[] toArray(Class componentType, Set set) {
		T[] array = (T[]) Array.newInstance(componentType, set.size());
		
		return set.toArray(array);
	}

	public static interface Factor {
		public Object getId(T object);

		public T merge(T newItem, T oldItem);
	}
}