public static <A> List<A> removeDuplicates(
			List<A> list,
			F1<A, List<Object>> extract) {
		LinkedList<A> removeds = new LinkedList<A>();
		
		List<List<Object>> extracteds = new LinkedList<List<Object>>();
		for (Iterator<A> iterator = list.iterator(); iterator.hasNext();) {
			A a = iterator.next();
			List<Object> extracted = extract.e(a);
			if (!extracteds.contains(extracted)) {
				extracteds.add(extracted);
			} else {
				removeds.add(a);
				iterator.remove();
			}
		}
		return removeds;
	}