У меня есть интерфейс
Код: Выделить всё
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