根据某些条件从 PriorityQueue 中移除不同类型的 Item

Removing different types of Items from PriorityQueue according to some conditions

我正在尝试检查名为 interLinksintraLinks 的优先队列结构中的两种链接。根据下面的方法 URLremoveCondition(),我尝试从我的 PQueue 中删除所有这两种 URL 链接 interLinksintraLinks 如果它们达到 MaxWaitTime 我将其设置为 10 Seconds 该方法将删除这些链接。

但问题是方法 URLremoveCondition() 仅从 PQueue 中删除 interLinks 而没有删除 intraLinks。如何解决此问题以删除 interLinksintraLinks

这是我的方法URLremoveCondition()

public static PriorityQueue <LinkNodeLight> PQueue = new PriorityQueue <> (); 
private static Integer MaxWaitTime = new Integer (10000); // 10 Seconds

public void URLremoveCondition() {
    synchronized (PQueue) {

            Iterator<LinkNodeLight> iterator = PQueue.iterator();
            while(iterator.hasNext()){
                LinkNodeLight URL = iterator.next();

                    long URLWaitingTime = System.currentTimeMillis() - URL.enqueTime.getMillis();
                    if(URLWaitingTime > MaxWaitTime){
                        iterator.remove();

                        System.out.println("DELETED NODE: " + URL.url + " WAITTIME: " +  Long.toString(URLWaitingTime));
                    }                 
            } 
        }   
    }

这是我的 class LinkNodeLight :

import org.joda.time.DateTime;

public class LinkNodeLight implements Comparable<LinkNodeLight> {
protected String url;
protected float weight;
protected DateTime enqueTime;
protected boolean interLinks;

public String getUrl() {
    return url;
}

public float getWeight() {
    return weight;
}

public void setWeight(float weight) {
    this.weight = weight;
}

public DateTime getEnqueTime() {
    return enqueTime;
}


public LinkNodeLight(String url) {
    this.url = url;
}

public boolean isInterLinks() {
    return interLinks;
}

public void setInterLinks(boolean interLinks) {
    this.interLinks = interLinks;
}

public void setEnqueTime(DateTime enqueTime) {
    this.enqueTime = enqueTime;
}

@Override
public int compareTo(LinkNodeLight link) {

    if (this.weight < link.weight) return 1;
     else if (this.weight > link.weight) return -1;
        return 0;

}
}

编辑:

我在这里创建 interLinksintraLinks

import java.util.LinkedList;
import java.util.List;


 public class URLWeight {

 public static List<LinkNodeLight> weight(LinkNode sourceLink, List<LinkNodeLight> links) {

    List<LinkNodeLight> interLinks = new LinkedList<>();
    List<LinkNodeLight> intraLinks = new LinkedList<>();

    for (LinkNodeLight link : links) {
        if (isIntraLink(sourceLink, link)) {
            intraLinks.add(link);
            link.setInterLinks(false);
        } else {
            interLinks.add(link);
            link.setInterLinks(true);
        }
    }

我通过为 intraLinksLinkNodeLightclass

生成 gettersetter 解决了这个问题
protected boolean intraLinks;

public boolean isIntraLinks() {
    return intraLinks;
}

public void setInterLinks(boolean interLinks) {
    this.interLinks = interLinks;
}


public void setIntraLinks(boolean intraLinks) {
    this.intraLinks = intraLinks;
}