Как я могу создать живую подколлекцию на основе предиката?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу создать живую подколлекцию на основе предиката?

Сообщение Anonymous »

Справочная информация
У меня есть интерфейс

Код: Выделить всё

public interface ThingRegistry {

public Set getAllThings();
public Set getAllThingsWithProperty(String property);
}
И реализация

Код: Выделить всё

public class MemoryThingRegistry implements ThingRegistry {
private final Set things = new HashSet();

public Set getAllThings() {
return Collections.unmodifiableSet(this.things);
}

public Set getAllThingsWithProperty(final String property) {
return this.things.stream().filter((thing) -> thing.hasProperty(property)).collect(Collectors.toUnmodifiableSet());
}
}
Проблема
  • Набор, возвращаемый функцией getAllThings(), будет отражать любые изменения, внесенные в мой реестр
  • Однако набор, возвращаемый getAllThingsWithProperty(), не будет отражать эти изменения
Вопрос
Есть ли способ используя стандартные библиотеки Java или какую-то невероятно распространенную стороннюю библиотеку, чтобы возвращаемое значение getAllThingsWithProperty() было «живым» подмножеством? И.Е. он «поддерживается» исходным набором, но повторно применяет предикат каждый раз, когда к нему обращаются? Предпочтительно что-то, что можно применить к любой коллекции, поскольку у меня есть другой интерфейс реестра, который использует список.
Я знаю, что могу написать свой собственный набор реализации, но предпочел бы этого избежать.

Подробнее здесь: https://stackoverflow.com/questions/774 ... -predicate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»