gpt4 book ai didi

java - 从 PagedList 中排除重复数据

转载 作者:行者123 更新时间:2023-12-01 09:27:16 28 4
gpt4 key购买 nike

我正在使用 Play2.0 框架作为后端 API。所以我想从数据库中列出游乐设施,并且我想排除具有重复“地点”名称的游乐设施。

我正在使用此代码,但这给了我存储在数据库中的所有游乐设施记录。如何排除重复的条目?

这是Java代码

public List<RideDTO> recent(long userId, int cursor, int count) {
PagedList<RideDTO> pagedList = RideDTO.find
.where()
.eq("user_id", userId)
.orderBy("created_on desc")
.findPagedList(cursor, count);
if (pagedList == null)
return null;
else
return pagedList.getList();
}

这是 RideDTO 模型类。我不想在数据库中保持位置唯一。

@Entity
@Table(name = "m_ride")
//@UniqueConstraint(columnNames = {"place"})
public class RideDTO extends Model {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@Constraints.Required
private long id;

@ManyToOne
@NotNull
@Constraints.Required
private UserDTO user;

@NotNull
@Constraints.Required
private String place;

@NotNull
@Constraints.Required
private double startLat;

@NotNull
@Constraints.Required
private double startLng;

@NotNull
@Constraints.Required
private double destLat;

@NotNull
@Constraints.Required
private double destLng;

private double currLat;

private double currLng;

@NotNull
@Constraints.Required
private short isFav;

private String image;

@NotNull
@CreatedTimestamp
@Constraints.Required
private Date createdOn;

@Transient
private double distance;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public UserDTO getUser() {
return user;
}

public void setUser(UserDTO user) {
this.user = user;
}

public String getPlace() {
return place;
}

public void setPlace(String place) {
this.place = place;
}

public double getStartLat() {
return startLat;
}

public void setStartLat(double startLat) {
this.startLat = startLat;
}

public double getStartLng() {
return startLng;
}

public void setStartLng(double startLng) {
this.startLng = startLng;
}

public double getDestLat() {
return destLat;
}

public void setDestLat(double destLat) {
this.destLat = destLat;
}

public double getDestLng() {
return destLng;
}

public void setDestLng(double destLng) {
this.destLng = destLng;
}

public double getCurrLat() {
return currLat;
}

public void setCurrLat(double currLat) {
this.currLat = currLat;
}

public double getCurrLng() {
return currLng;
}

public void setCurrLng(double currLng) {
this.currLng = currLng;
}

public short getIsFav() {
return isFav;
}

public void setIsFav(short isFav) {
this.isFav = isFav;
}

public String getImage() {
return image;
}

public void setImage(String image) {
this.image = image;
}

public Date getCreatedOn() {
return createdOn;
}

public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}

public double getDistance() {
return distance;
}

public void setDistance(double distance) {
this.distance = distance;
}

@Override
public String toString() {
return "RideDTO{" +
"id=" + id +
", user=" + user +
", place='" + place + '\'' +
", startLat=" + startLat +
", startLng=" + startLng +
", destLat=" + destLat +
", destLng=" + destLng +
", currLat=" + currLat +
", currLng=" + currLng +
", isFav=" + isFav +
", image='" + image + '\'' +
", createdOn=" + createdOn +
", distance=" + distance +
'}';
}

public static final Finder<Long, RideDTO> find = new Finder<Long, RideDTO>(Long.class, RideDTO.class);
}

最佳答案

无法在这里测试代码(我正在工作)

有几个选项,您可以:

  • 在数据库级别执行此操作(我更喜欢的方式,因为它更快)

  • 调用.stream()方法并进行一些排序

试试这个:

public List<RideDTO> recent(long userId, int cursor, int count) {
PagedList<RideDTO> pagedList = RideDTO.find.select("*")
.where()
.eq("user_id", userId)
.orderBy("created_on desc")
.setDistinct(true)
.findPagedList(cursor, count);

return pagedList.getList();
}

请注意,您不必在 Ebean 中返回 null,只需在 View 中检查 list.isEmpty() 即可。

Ebean 不会抛出空指针异常。

编辑:正如评论所指出的,我还没有设置应该区分的值。

在 Ebean 中使用 setDistinct 时,我们必须将其与 select 一起使用。

来自docs

设置此查询是否使用 DISTINCT。当设置 setDistinct(true) 时,必须指定 select() 子句。其原因是,通常 ORM 查询包含“id”属性,这对于不同的查询没有意义。

 List<Customer> customers =
Ebean.find(Customer.class)
.setDistinct(true)
.select("name") // only select the customer name
.findList();

关于java - 从 PagedList 中排除重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39741528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com