Имеет ли значение порядок применения компараторов и предикатов? - PullRequest
1 голос
/ 24 июня 2019

У нас есть веб-страница, где пользователь может выбрать произвольное количество правил для фильтрации и сортировки группы товаров. Для каждого правила он устанавливает для него приоритет, с помощью которого пользователь определяет порядок применения правил.

Из этой группы правил я извлекаю объекты Comparator (если правило сортировало) и / или предикаты (если пользователь хочет фильтровать элементы). Я хотел бы использовать их с потоком элементов для их фильтрации и сортировки.

Мой вопрос: имеет ли значение порядок применения объектов Comparator и Predicate? Я знаю, что порядок объектов Comparator важен, но имеет ли значение, если предикат появляется в начале или в конце?

Например:

We have Comparator objects: comparator1, comparator2
We have Predicate objects: predicate1, predicate2

Is there a difference between applying them in the following orders:

- comparator1, comparator2, predicate1, predicate2
- predicate1, predicate2, comparator1, comparator2
- predicate1, comparator1, predicate2, comparator2
- predicate2, comparator1, comparator2, predicate1

Note: comparator1 always appears before comparator2. I am aware that changing their order could result in different results in terms of sorting.

Теперь я думаю, что все вышеперечисленные ситуации приведут к одному и тому же результату (с точки зрения сортировки и элементов). Это позволило бы мне сначала применить все фильтры, а затем позаботиться о сортировке. Но я не уверен, поэтому мне пришлось спросить здесь.

Ответы [ 2 ]

2 голосов
/ 24 июня 2019
  1. Фильтрация идет перед сортировкой.
  2. Порядок компараторов имеет значение.Посмотрите на Comparator#thenComparing для составных компараторов в порядке, указанном пользователем.
  3. Порядок предикатов не имеет значения (если только они не являются состоящими или зависят от других, чего следует избегать).Посмотрите на Predicate#and, чтобы составлять предикаты в любом порядке.
1 голос
/ 24 июня 2019

Если ваши предикаты не имеют состояния и не изменяют объекты, которые они проверяют, тогда они являются выборками в терминах реляционной алгебры .Таким образом, их порядок не имеет значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...