DasherJava / src / dasherJava / core / collections / NamedObject.java
NamedObject.java
Raw
package dasherJava.core.collections;

import java.util.ArrayList;
import java.util.List;

public interface NamedObject {
	
	String getName();
	
	static String[] buildNamesArray(List<? extends NamedObject> objects) {
		String[] names = new String[objects.size()];
		for (int i = 0; i<names.length; i++) {
			names[i]=objects.get(i).getName();
		}
		return names;
	}
	
	static <T extends NamedObject> T findObjectByName(String name, Iterable<T> objects) {
		for (T object : objects) {
			if (object.getName().equals(name)) return object;
		}
		return null;
	}
	
	//Modifies the list passed as parameter and returns another list that contains all names that occurred
	//multiple times.
	static List<String> removeDuplicates(List<? extends NamedObject> list) {
		List<String> duplicatedNames = new ArrayList<>();
		for (int i = 0; i<list.size(); i++) {
			String name = list.get(i).getName();
			int nameCount = 0;
			for (NamedObject object : list) {
				if (object.getName().equals(name)) nameCount++;
			}
			if (nameCount>1) {
				duplicatedNames.add(name);
				for (int j = list.size()-1; j>=0; j--) {
					if (list.get(j).getName().equals(name)) list.remove(j);
				}
				i--;
			}
		}
		return duplicatedNames;
	}
	
	static void sortCaseInsensitive(List<? extends NamedObject> list) {
		list.sort((o1, o2) -> String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName()));
	}
}