Java - отличный список объектов

Извините, я немного опоздал на вечеринку, хотя думаю, что другие могут извлечь выгоду из того, что я сделал. У меня есть страница HTML 5, хотя у нас все еще есть .NET 3.5. Мы хотели сохранить элемент .NET, хотя изменили тип на электронную почту. Я попробовал несколько методов (включая Милокс выше), но безрезультатно, но тот, который работал для меня, заключался в следующем: я добавил свойство JavaScript к самому элементу, встроенному (когда я помещал его в тег скрипта, он не выбирал по какой-то причине ...) Вот как будет выглядеть ваш тег, если вы используете мои изменения:

<asp:TextBox runat="server" type="email" onfocus="this.type='email'"/>

Eli

29
задан Brian 20 June 2009 в 01:33
поделиться

6 ответов

Используйте реализацию интерфейса Set (классу T может потребоваться специальный метод .equals () , и вам, возможно, придется реализовать этот .equals () самостоятельно). Обычно HashSet делает это из коробки: он использует методы Object.hashCode () и Object.equals () для сравнения объектов. Это должно быть достаточно уникальным для простых объектов. Если нет, вам придется реализовать T.equals () и T.hashCode () соответственно.

См. Комментарий Гаурава Сайни ниже для библиотек, помогающих реализовывать равенства и хэш-код .

28
ответ дан 28 November 2019 в 00:36
поделиться

Поместите их в 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
20
ответ дан 28 November 2019 в 00:36
поделиться

Вы можете использовать Set . Существует несколько реализаций:

  • HashSet использует hashCode объекта, а равно .
  • TreeSet использует compareTo (определено Comparable ) или compare (определяется Comparator ). Имейте в виду, что сравнение должно соответствовать равно . См. TreeSet JavaDocs для получения дополнительной информации.

Также имейте в виду, что если вы переопределите equals , вы должны переопределить hashCode , чтобы два объекта equals имели одинаковый хэш код.

4
ответ дан 28 November 2019 в 00:36
поделиться

Обычный способ сделать это - преобразовать в 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.

3
ответ дан 28 November 2019 в 00:36
поделиться
return new ArrayList(new HashSet(recipients));
39
ответ дан 28 November 2019 в 00:36
поделиться

Фактически lambdaj реализует эту функцию с помощью метода selectDistinctArgument

http://lambdaj.googlecode.com/svn/trunk/html/apidocs/ch/lambdaj/Lambda.html#selectDistinctArgument ( java.lang.Object,% 20A)

2
ответ дан 28 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: