选择给定元素的所有唯一对-条件API

问题描述 投票:0回答:1

我有一个带有参数的“会议”实体:meetingId,catId,dogId。catId和dogId对相同的地方可能有很多会议。我需要计算给定猫遇到多少只狗。换句话说,我需要计算每只猫与另一只狗在一起的情况下给定猫的开会次数。

如何使用springframework.data.mongodb.core.query.Criteria来实现?

public long countUniqueByCatId(String catId) {
            Query query = new Query()
                    .addCriteria(Criteria.where(CAT_ID).is(catId))
                    ....
            return template.count(query, Meeting.class);

同样的问题也适用于流。

meetingsList.entrySet()
                    .stream()
                    .map { it -> it.value }
                    .filter { m -> (m.getCatId() == catId) }
                    ...
                    .count();
java spring mongodb criteria
1个回答
0
投票
CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Long> query = cb.createQuery(Long.class); Root<meeting> meetings = query.from(meeting.class); //here you can change meetings to your new catdogIds class cq.select(cb.countDistinct(meetings)).where(Criteria.where(CAT_ID).is(catId)); return entityManager.createQuery(cq).getSingleResult();

对于流,可以使用.distinct(),但应实现equals方法像这个例子https://www.journaldev.com/31860/java-stream-distinct-function

您还可以创建一个包含catId和dogId的类,然后在覆盖equals方法之后将结果列表转换为一个集合,以在比较对象具有相同的cat和dog id时返回true。    
© www.soinside.com 2019 - 2024. All rights reserved.