Вы можете создать свой собственный компаратор.
Comparator<Student> comparator = new Comparator<Student>()
{
@Override
public int compare(Student o1, Student o2)
{
int index1 = list1.indexOf(o1.getName());
int index2 = list1.indexOf(o2.getName());
return Integer.compare(index1 , index2 );
}
};
и чем сортировать:)
java.util.Collections.sort(yourList, comparator);
Вот взлом грубой силы, которым я не слишком горжусь, но он работает при необходимости в чем-то быстром и грязном.
public static void Sort(this NameValueCollection nameValueCollection)
{
// Create a temporary collection the same size as the original
NameValueCollection tempNameValueCollection = new NameValueCollection(nameValueCollection.Count);
// Sort the keys
string[] keys = nameValueCollection.AllKeys;
Array.Sort(keys);
foreach (string key in keys)
{
// Sort the values
string[] values = nameValueCollection[key].Split(',');
Array.Sort(values);
// Add each value to the temporary collection
foreach (string value in values)
{
tempNameValueCollection.Add(key, value);
}
}
// Clear the original collection
nameValueCollection.Clear();
// Add the sorted entries back
nameValueCollection.Add(tempNameValueCollection);
}
Запустите с SortedDictionary<string,string>
или SortedList<string,string>
и Вы уже там...
Если Вы нуждаетесь в нескольких объектах на ключ, то рассматриваете a SortedDictionary<string,List<string>>
. Существуют способы упростить дополнение и т.д. с дополнительными методами - это не должно быть страшно.
Отметьте также это NameValueCollection
нечувствительно к регистру, таким образом, Вы, возможно, должны были бы использовать одно из нечувствительных сравнений - например:
Dictionary<string,string> data = new Dictionary<string,string>(
StringComparer.InvariantCultureIgnoreCase);
(редактирование) здесь является примером использования дополнительного метода для заполнения нескольких значений против единственного ключа в C# 3.0:
static void Main()
{
var data = new Dictionary<string, List<string>>(
StringComparer.InvariantCultureIgnoreCase);
data.Add("abc", "def");
data.Add("abc", "ghi");
}
static void Add<TKey, TValue>(this IDictionary<TKey, List<TValue>> lookup,
TKey key, TValue value)
{
List<TValue> list;
if (!lookup.TryGetValue(key, out list))
{
list = new List<TValue>();
lookup.Add(key, list);
}
list.Add(value);
}