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()));
}
}