J'ai une classe d'entité avec les champs suivants: id, orderNo. Chaque entité doit être stockée dans une file d'attente de priorité Java. Les éléments dont l'ID est compris entre 1 et 3000 ont une priorité plus élevée et doivent être stockés dans ordre croissant de commandeAucun élément au-dessus des éléments avec id> 3000. Les éléments avec ids> 3000 sont stockés dans l'ordre croissant de commandeNon au-dessous des éléments prioritaires (avec les identifiants 1 - 3000).Tri de la file d'attente prioritaire pour une plage d'éléments de priorité plus élevée et d'autres éléments de priorité inférieure
Par exemple:
(1st insertion to queue: id=4000 orderNo=1)
(2nd insertion to queue: id=5000 orderNo=2)
(3rd insertion to queue: id=100 orderNo=3)
(4th insertion to queue: id=50 orderNo=4)
séquence de tri Expected:
(id=100 orderNo=3)
(id=50 orderNo=4)
(id=4000 orderNo=1)
(id=5000 orderNo=2)
classe OrderEntity:
public class OrderEntity implements Comparable<OrderEntity> {
private int id;
private int getOrderNo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderNo() {
return getOrderNo;
}
public void setOrderNo(int getOrderNo) {
this.getOrderNo = getOrderNo;
}
@Override
public int compareTo(OrderEntity arg0) {
if ((this.getId() >= 1 && this.getId() <= 3000) && (arg0.getId() >= 1 && arg0.getId() <= 3000)) {
if (this.getOrderNo() > arg0.getOrderNo()) {
return 1;
} else {
return 0;
}
} else if ((this.getId() <= 3000) && (arg0.getId() > 3000)) {
return 1;
} else if ((this.getId() > 3000) && (arg0.getId() <= 3000)) {
return 1;
} else if ((this.getId() > 3000) && (arg0.getId() > 3000)) {
if (this.getOrderNo() > arg0.getOrderNo()) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
}
classe BonCommande:
public class OrderProcessor {
private static int count;
static Queue<OrderEntity> pq = new PriorityQueue<>();
public String createOrder(int id) {
OrderEntity orderEntity = new OrderEntity();
orderEntity.setId(id);
count = count + 1;
orderEntity.setOrderNo(count);
pq.add(orderEntity);
String res = "";
for (OrderEntity rd : pq) {
res = res + rd.getId() + " " + rd.getOrderNo() + "\n";
}
return res.trim();
}
}
Et votre question est ...? –
Ma question est que je ne suis pas en mesure d'obtenir cette séquence avec la mise en œuvre ci-dessus. Je voulais savoir où je me trompe. –
Un problème est votre méthode 'compareTo', qui renvoie 0 (signifiant égal) si le premier élément n'est pas plus grand que le second. 'compareTo' devrait renvoyer -1, 0 ou 1, selon que le premier élément est inférieur, égal ou supérieur au second. Généralement, vous utilisez 'Integer.compare' pour vérifier cela. –