Благодаря я и. У меня есть лучшее решение, которое позволяет вам создать определенную таблицу календаря. Например, если я пытаюсь создать таблицу 2014-04, она выглядит так:
SELECT (CURDATE() - INTERVAL c.number DAY) AS DATE
FROM
(
SELECT singles + tens + hundreds number FROM
(
SELECT 0 singles
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) singles JOIN
(
SELECT 0 tens
UNION ALL SELECT 10 UNION ALL SELECT 20 UNION ALL SELECT 30
UNION ALL SELECT 40 UNION ALL SELECT 50 UNION ALL SELECT 60
UNION ALL SELECT 70 UNION ALL SELECT 80 UNION ALL SELECT 90
) tens JOIN
(
SELECT 0 hundreds
UNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300
UNION ALL SELECT 400 UNION ALL SELECT 500 UNION ALL SELECT 600
UNION ALL SELECT 700 UNION ALL SELECT 800 UNION ALL SELECT 900
) hundreds
ORDER BY number DESC
) c
WHERE c.number BETWEEN
DAYOFYEAR(NOW()) - DAYOFYEAR('2014-04-01')- DAY(LAST_DAY('2014-04-01')) +1
AND
DAYOFYEAR(NOW()) - DAYOFYEAR('2014-04-01')
Да, вы правы, что вам нужно иметь согласованные методы equals()
и hashcode()
для вашего объекта, чтобы иметь возможность использовать distinct()
, потому что под прикрытием оператор distinct
использует HashSet
.
Версия distinct
с Func1
позволяет вам преобразовать объект во что-то, что вы хотите отличить (но должны реализовать согласованные методы equals
и hashcode
).
Предположим, у меня есть Observable<Person>
, где Person
выглядит следующим образом:
class Person {
String firstName;
String lastName;
}
Затем, чтобы подсчитать количество различных имен, я могу сделать это:
persons.distinct(person -> person.firstName).count();