我使用一個結果採取從一個MySQL數據庫表中的所有信息,並從這裏將所有的值到一個數組Java的比較問題
public void populateQueueFromDB() {
// create priority queue
try {
String url = "jdbc:mysql://localhost:3306/project";
Connection conn = DriverManager.getConnection(url, "root", "nbuser");
PreparedStatement stmt = conn.prepareStatement("SELECT user_id,s_date,e_date,d_date,department,projectname,projectapplication,priority,cores,disk_space,analysis FROM booking");
ResultSet rs;
rs = stmt.executeQuery();
//List<JobRequest> jobList = new ArrayList<JobRequest>();
while (rs.next()) {
JobRequest job = new JobRequest();
User user = new User();
user.setUserID(rs.getString("user_id"));
job.setUserID(user.getUserID()); // changes the /user id to the job.setuser id so can call for my queue print.
job.setStartDate(rs.getString("s_date"));
job.setEndDate(rs.getString("e_date"));
job.setDeadDate(rs.getString("d_date"));
job.setDepartment(rs.getString("department"));
job.setProjectName(rs.getString("projectname"));
job.setProjectApplication(rs.getString("projectapplication"));
job.setPriority(rs.getInt("priority"));
job.setCores(rs.getInt("cores"));
job.setDiskSpace(rs.getInt("disk_space"));
job.setAnalysis(rs.getString("analysis"));
schedulerPriorityQueue.addJob(job);
}
schedulerPriorityQueue.printQueue();
conn.close();
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
}
我走下車,並打電話給我的比較對數據進行排序,取決於1,2,3的優先級然後排序隊列。代碼命名等一些其他位,但本質上,它把我送到比較
public class JobQueueComparator implements Comparator<JobRequest> {
@Override
public int compare(JobRequest object1, JobRequest object2) {
if(object1.getPriority() < object2.getPriority()){
return 1;
} else {
return -1;
}
}
}
但我從比較得到的輸出命令其在優先級3,1 2.然後,我從例子適應了這個在線,但我不明白我見過的比較器例子的回報。
我該如何改變比較器來排序我的優先級,1是最重要的,3是最不重要的。我確定在將所有結果集添加到數組後,打印輸出,所以我知道它正在工作,因爲它改變了我的順序,只是不知道如何命令它。
感謝
編輯: schedulerPriorityQueue
public class Queue {
private Comparator<JobRequest> comparator = new JobQueueComparator(); //calls my comparator
private PriorityQueue< JobRequest> scheduledJobs = new PriorityQueue<JobRequest>(100, comparator);
public void addJob(JobRequest job) {
// now add job to priority queue
scheduledJobs.add(job); // add jobs from the resultset into queue
}
你顯然需要三種情況::
,如果你考慮的優先順序是這樣這樣的工作'prio1
Danyel
2013-02-14 13:33:35
由於優先級字段是一個int,爲什麼不只是轉換爲Integer對象並使用它的compareTo方法(整數是可比較的)呢? – cjstehno 2013-02-14 13:35:18
你沒有說明你的比較器是如何使用的......第一個代碼塊對於這個問題是毫無價值的。你不顯示'schedulerPriorityQueue.addJob()'是如何實現的。這可能是你的錯誤所在。我們也不知道你是否在其他地方調用任何類型的... – 2013-02-14 13:35:43