Извините, я немного опоздал на вечеринку, хотя думаю, что другие могут извлечь выгоду из того, что я сделал. У меня есть страница HTML 5, хотя у нас все еще есть .NET 3.5. Мы хотели сохранить элемент .NET, хотя изменили тип на электронную почту. Я попробовал несколько методов (включая Милокс выше), но безрезультатно, но тот, который работал для меня, заключался в следующем: я добавил свойство JavaScript к самому элементу, встроенному (когда я помещал его в тег скрипта, он не выбирал по какой-то причине ...) Вот как будет выглядеть ваш тег, если вы используете мои изменения:
<asp:TextBox runat="server" type="email" onfocus="this.type='email'"/>
Eli
Используйте реализацию интерфейса Set
(классу T может потребоваться специальный метод .equals ()
, и вам, возможно, придется реализовать этот .equals ()
самостоятельно). Обычно HashSet
делает это из коробки: он использует методы Object.hashCode ()
и Object.equals ()
для сравнения объектов. Это должно быть достаточно уникальным для простых объектов. Если нет, вам придется реализовать T.equals ()
и T.hashCode ()
соответственно.
См. Комментарий Гаурава Сайни ниже для библиотек, помогающих реализовывать равенства и хэш-код .
Поместите их в TreeSet, который содержит настраиваемый компаратор, который проверяет нужные вам свойства:
SortedSet<MyObject> set = new TreeSet<MyObject>(new Comparator<MyObject>(){
public int compare(MyObject o1, MyObject o2) {
// return 0 if objects are equal in terms of your properties
}
});
set.addAll(myList); // eliminate duplicates
Вы можете использовать Set
. Существует несколько реализаций:
HashSet
использует hashCode
объекта, а равно
. TreeSet
использует compareTo
(определено Comparable
) или compare
(определяется Comparator
). Имейте в виду, что сравнение должно соответствовать равно
. См. TreeSet
JavaDocs для получения дополнительной информации. Также имейте в виду, что если вы переопределите equals
, вы должны переопределить hashCode
, чтобы два объекта equals имели одинаковый хэш код.
Обычный способ сделать это - преобразовать в Set, а затем обратно в список. Но вы можете поработать с Функциональной Java . Если вам понравился Lamdaj, вам понравится и FJ.
recipients = recipients
.sort(recipientOrd)
.group(recipientOrd.equal())
.map(List.<Recipient>head_());
Вам нужно будет определить порядок для получателей, recipientOrd
. Примерно так:
Ord<Recipient> recipientOrd = ord(new F2<Recipient, Recipient, Ordering>() {
public Ordering f(Recipient r1, Recipient r2) {
return stringOrd.compare(r1.getEmailAddress(), r2.getEmailAddress());
}
});
Работает, даже если у вас нет контроля над equals ()
и hashCode ()
в классе Recipient.
Фактически lambdaj реализует эту функцию с помощью метода selectDistinctArgument