Java: Как я выполняю, операции списка с различными определениями равняется?

Лучший подход для встраивания SWF в страницу HTML должен использовать SWFObject.

Это - простая библиотека JavaScript с открытым исходным кодом, которая является простым в использовании и благоприятным для стандартов методом для встраивания содержания Flash.

Это также предлагает обнаружение версии Flash player. Если пользователь не будет иметь версии Flash требуемой или отключит JavaScript, они будут видеть альтернативное содержание. Можно также пользоваться этой библиотекой для инициирования обновления Flash player. Как только пользователь обновил, они будут перенаправлены назад к странице.

пример из документации:



  
    SWFObject dynamic embed - step 3
    
    

    

  
  
    

Alternative content

А хороший инструмент для использования наряду с этим является HTML SWFObject и генератором JavaScript . Это в основном генерирует HTML и JavaScript, необходимо встроить Flash с помощью SWFObject. Идет с очень простым UI для Вас для ввода параметров.

Это настоятельно рекомендовано и очень просто использовать.

7
задан Pascal Thivent 6 December 2009 в 12:58
поделиться

7 ответов

Если вы должны управлять классом вне вашего контроля, я бы предложил использовать делегирование. Вот моя попытка:

  1. Создайте оболочку RichList вокруг List , реализующих контракт List , на основе шаблона декоратора .
  2. Создайте интерфейс EqualityChecker с помощью одного метода public boolean equal (T t1, T, t2).
  3. Реализуйте этот интерфейс для вашего универсального pojo дважды: один проверка только идентификатора, а другая проверка других полей.
  4. Добавьте оба метода, которые вас интересуют (установите вычитание и установите пересечение), но с дополнительным аргументом, которым является конкретный экземпляр EqualityChecker это сделает за вас тест на равенство.

Таким образом, вы можете добавить обе операции ко всем существующим List s для любого типа объекта, для которого вы написали EqualityChecker .

Дальнейшие улучшения: Вы можете также напишите default EqualityChecker , который просто вызывает метод равенства сравниваемых объектов. Затем вы можете перегрузить обе новые операции, чтобы по умолчанию EqualityChecker .

2
ответ дан 7 December 2019 в 14:33
поделиться

If your lists contain no duplicates (with repsect to the hypothetical custom comparator classes) you can use two TreeSets instead, instantiated with your two comparators respectively.

A drawback of this (apart from the duplication constraint) is that the order you get when iterating over elements depend on the comparators.

1
ответ дан 7 December 2019 в 14:33
поделиться

Учитывая ваши особые требования к равенству, List # removeAll () и List # keepAll () не соответствуют вашим потребностям, поэтому я думаю, что вы потребуется специальная реализация, чтобы сделать что-то похожее на обе операции.

1
ответ дан 7 December 2019 в 14:33
поделиться

Не существует решения, которое подчинялось бы контракту List, и ни одна из существующих реализаций list не позволяет вам предоставить компаратор. Контракт List определяет поведение списка с точки зрения метода каждого элемента equals (Object) .

Предложение использовать TreeSets с разными компараторами также является нарушением контракта, если компаратор Метод compare несовместим с методом equals (Object) каждого элемента.

На практике вам может потребоваться реализовать свои собственные классы списков. Вы можете сделать его реализацией List, которая не строго следует контракту List, но вы должны быть осторожны, чтобы не нарушить работу других библиотечных методов / классов.

0
ответ дан 7 December 2019 в 14:33
поделиться

Если вы не хотите самостоятельно программировать операции набора и , вы не против тратить ресурсы ЦП и памяти, вы можете:

  • построить WrappedPojo s на основе ваших GenericPojo s
  • дает подходящие реализации WrappedPojo equals ()
  • для создания новых списков соответствующего типа WrappedPojo для выполнения операции с
  • , копирование содержащихся GenericPojo обратно в их исходные контейнеры (при необходимости) после завершения операции.

Уродливо, но просто.

0
ответ дан 7 December 2019 в 14:33
поделиться

Обе операции, которые вы пытаетесь выполнить, являются функциональными, хотя Java не поддерживает их очень хорошо, и вы, вероятно, будете писать их совсем по-другому. Возможно, вам придется переосмыслить то, чего вы пытаетесь достичь, чтобы соответствовать java.

То, что вы делаете, - это выполнение операции над проекцией типа данных (т. Е. Для поднабора полей)

Операции, которые вы делаете также используются операции Set, а не операции List. например, вы не можете пересечь два списка (или, по крайней мере, вы должны определить, что это означает). Удаление также может работать не так, как вы ожидаете, и для списка.

Представьте, что у вас есть метод, который возвращает коллекцию pojos только с указанные вами поля. В прошлом я написал библиотеку, чтобы сделать это эффективно с помощью динамически генерируемого класса, взгляните на функциональную Java или что-то подобное.

public static <Pojo, Pojo2> Set<Pojo2> project(Collection<Pojo> collection,
      String... fieldsToRetain);

List1 - List2 (где классы GenericPojo равны, если равны только идентификаторы)

Set<PojoWithId> setOfIds = project(list1, "id")
setOfIds.retainAll(project(list2, "id"));

Intersect списка List1 и List2 (где id, адрес, город, страна, но не extraDetails GenericPojo равны)

Set<PojoWithThreeFields> intersection = project(list1, "id", "address", "city", "country");
intersection.retainAll(project(list2, "id", "address", "city", "country"));
0
ответ дан 7 December 2019 в 14:33
поделиться

Вы можете сохранить все это в объектах домена, используя следующий подход:

  1. Реализуйте equals ( ... ) на ] GenericPojo основан только на id .
  2. Определите WrappedPojo как оболочку вокруг GenericPojo с равным ( .. . ) на основе дополнительных полей GenericPojo .
  3. Для второго варианта использования используйте список обернутых экземпляров.

Я предполагаю, что основная проблема заключается в том, чтобы единый предметный класс с разными определениями равенства.

0
ответ дан 7 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

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