С помощью Java 8 вы можете использовать ссылку на метод для вашего компаратора:
import static java.util.Comparator.comparing;
Collections.sort(list, comparing(MyObject::getStartDate));
Это выглядит подобным Поиск Предложения Lucene вопрос. Если Вам интересно, это - то, как я ответил на тот вопрос:
String defaultField = ...;
Analyzer analyzer = ...;
QueryParser queryParser = new QueryParser(defaultField, analyzer);
queryParser.setDefaultOperator(QueryParser.Operator.AND);
Query query = queryParser.parse("Searching is fun");
Как сказанный Adam, нет никакой потребности сделать что-либо к строке запроса. QueryParser setDefaultOperator делает точно, что Вы просите.
Почему не всего предварительный синтаксический анализ пользователь ищет вход и корректирует его для установки критериям с помощью синтаксис запроса Lucene перед передачей его к Lucene. С другой стороны, Вы могли просто создать некоторую документацию справки относительно того, как использовать стандартный синтаксис, чтобы создать определенный запрос и позволить пользователю решить, как запрос должен быть выполнен.
Lucene имеет обширный язык запросов, как описано здесь , который описывает все, что Вы хотите за исключением + быть значением по умолчанию, но это - что-то, что Вы можете простой дескриптор путем замены пробелов +. Таким образом, единственная вещь, которую необходимо сделать, определяют формат, Вы хотите, чтобы люди ввели свои поисковые запросы в (я настоятельно советовал бы для соблюдения синтаксиса Lucene по умолчанию), и затем можно записать преобразования от собственного синтаксиса до синтаксиса Lucene.
Поведение трудно кодируется в метод addClause (Список, интервал, интервал, Запрос) класса org.apache.lucene.queryParser. QueryParser, таким образом, единственный способ изменить поведение (кроме обходных решений выше) состоит в том, чтобы изменить тот метод. Конец метода похож на это:
if (required && !prohibited)
clauses.addElement(new BooleanClause(q, BooleanClause.Occur.MUST));
else if (!required && !prohibited)
clauses.addElement(new BooleanClause(q, BooleanClause.Occur.SHOULD));
else if (!required && prohibited)
clauses.addElement(new BooleanClause(q, BooleanClause.Occur.MUST_NOT));
else
throw new RuntimeException("Clause cannot be both required and prohibited");
Изменение "ДОЛЖНО" к, "ДОЛЖЕН", должен сделать пункты (например, слова) требуемый по умолчанию.