Count против countDistinct в OptaPlanner

#optaplanner

#optaplanner

Вопрос:

Примеры в документах о ConstraintCollectors count() и countDistinct() не совсем понятны:

ConstraintCollectors.count(…​) Подсчитывает все элементы в группе.
ConstraintCollectors.countDistinct(…​) Подсчитывает любой элемент в группе один раз, независимо от того, сколько раз это происходит.

Я не вижу разницы между ними. В сочетании с groupBy() , разве оба они не возвращают BiConstraintStream<A, Integer> кортежи, представляющие группы A , и соответствующее им количество?

Ответ №1:

В этом методе отсутствуют javadocs и некоторые примеры: https://issues.redhat.com/browse/PLANNER-2241

подсчет:

 from([
  Person("Ann", "Cole", 20),
  Person("Beth", "Cole", 20),
  Person("Carl", "Cole", 22),
  Person("Dan", "Jones", 20)
]).groupBy(Person::getLastName, count())

returns [{"Cole", 3}, {"Jones", 1}]
  

countDistinct:

 from([
  Person("Ann", "Cole", 20),
  Person("Beth", "Cole", 20),
  Person("Carl", "Cole", 30),
  Person("Dan", "Jones", 20)
]).groupBy(Person::getLastName, countDistinct(Person::getAge))

returns [{"Cole", 2}, {"Jones", 1}]
  

Эти примеры проясняют разницу?