Переопределить body-color
. В CSS цвет текста элемента контролируется с помощью смутно названного свойства color
. Таким образом, имя переменной начальной загрузки происходит от этого.
Вы могли записать метод, который берет экземпляр интерфейса, который определяет check(Cat)
метод, где тот метод может быть реализован с любой проверкой свойства, Вы хотите.
Еще лучше, сделайте это универсальным:
public interface Checker<T> {
public boolean check(T obj);
}
public class CatChecker implements Checker<Cat> {
public boolean check(Cat cat) {
return (cat.age == 3); // or whatever, implement your comparison here
}
}
// put this in some class
public static <T> Collection<T> findAll(Collection<T> coll, Checker<T> chk) {
LinkedList<T> l = new LinkedList<T>();
for (T obj : coll) {
if (chk.check(obj))
l.add(obj);
}
return l;
}
, Конечно, как другие люди говорят, это - то, для чего были сделаны реляционные базы данных...
Вот идея для класса искателя, который Вы могли параметризовать с определенными значениями, которые Вы хотите искать.
Вы могли пойти далее и сохранить названия свойств также, вероятно, в Карте с требуемыми значениями. В этом случае Вы использовали бы отражение о классе CAT для вызова соответствующих методов, учитывая имена свойства.
public class CatSearcher {
private Integer ageToFind = null;
private String foodToFind = null;
public CatSearcher( Integer age, String food ) {
this.ageToFind = age;
this.foodToFind = food;
}
private boolean isMatch(Cat cat) {
if ( this.ageToFind != null && !cat.getAge().equals(this.ageToFind) ) {
return false;
}
if ( this.foodToFind != null && !cat.getFood().equals(this.foodToFind) {
return false;
}
return true;
}
public Collection<Cat> search( Collection<Cat> listToSearch ) {
// details left to the imagination, but basically iterate over
// the input list, call isMatch on each element, and if true
// add it to a local collection which is returned at the end.
}
}
Вы могли хранить те объекты на базе данных. Если Вы не хотите издержки полноценного сервера базы данных, можно использовать встроенный как HSQLDB. Тогда можно использовать, в спящем режиме или BeanKeeper (более простой использовать) или другой ORM для отображения объектов на таблицы. Вы продолжаете использовать модель OO и получаете усовершенствованное устройство хранения данных и запросы преимуществ от базы данных.
Вы могли попробовать часть общего кода в Apache проект палаты общин. Эти Наборы подпроект предоставляет код для нахождения объектов, которые соответствуют конкретному Предикату, а также большое количество предикатов (равняется, пустой указатель, instanceof, и т.д.). подпроект BeanUtils позволяет Вам делать предикаты, которые тестируют свойства бобов.
Использование класс CollectionUtils для поиска в наборе. Существует несколько методов для этого, но проверяют выбор () метод, в частности. Используйте следующие классы, чтобы создать предикаты или записать Ваше собственное: Предикат , PredicateUtils, BeanPredicate.
Это является все иногда немного громоздким, но по крайней мере это универсально!:-)
Можно использовать что-то как JoSQL и записать 'SQL' против наборов: http://josql.sourceforge.net/
, Который походит на то, что Вы хотите с дополнительным преимуществом способности сделать более сложные запросы.
Много походит на что-то, для чего Вы использовали бы LINQ в.NET
, В то время как еще нет никакой "реальной" реализации LINQ для Java, Вы могли бы хотеть взглянуть на Вопрос , который мог сделать то, что Вы описываете достаточно легко.
Я предлагаю использовать Jxpath, он позволяет Вам делать запросы на графах объектов как будто это где xpath как
JXPathContext.newContext(cats).
getValue("//*[@drinks='milk']")
Я использовал Google Collections (теперь названный Гуава ) для этого вида проблемы. Существует класс под названием Iterables, который может взять интерфейс под названием Предикат как параметр метода, который действительно полезен.
Cat theOne = Iterables.find(cats, new Predicate<Cat>() {
public boolean apply(Cat arg) { return arg.age() == 3; }
});
Проверка это здесь !
Попробуйте API наборов свободного городского населения:
List<Cat> bigList = ....; // master list
Collection<Cat> smallList = CollectionUtils.select(bigList, new Predicate() {
public boolean evaluate(Object o) {
Cat c = (Cat)o;
return c.getFavoriteFood().equals("Wiskas")
&& c.getWhateverElse().equals(Something);
}
});
, Конечно, Вы не должны использовать анонимный класс каждый время, Вы могли создать реализации эти Predicate
интерфейс для наиболее часто используемого searchs.
Опять же, с API общих коллекций: Вы получаете код типа «проверка», когда реализуете предикат отдельно: -
public class CatPredicate implements Predicate {
private int age;
public CatPredicate(int age) {
super();
this.age = age;
}
@Override
public boolean evaluate(Object o) {
Cat c (Cat)o;
return c.getAge()==this.age;
}
}
, который используется как: -
CollectionUtils.filter(catCollectionToFilter, new CatPredicate(3))
Решения, основанные на предикатах, фильтрах и пользовательских итераторах/сравнениях, хороши, но они не дают аналога с индексом базы данных. Например: Я хочу искать коллекцию кошек разными способами: по полу и возрасту и по возрасту, поэтому это выглядит как два индекса: 1) [пол, возраст] 2) [возраст]. Значения, к которым обращаются эти индексы, можно было бы хэшировать, чтобы реализовать быстрый поиск, не итерируя всю коллекцию. Есть ли где-нибудь такое решение?
.