对每个循环进行前10次迭代-java
我目前有以下代码。我希望只进行for each循环的前10次迭代,将DogDetail添加到TableView中,而不是从网页中提取的记录量 例如:如果一只狗有50条历史记录,我只想得到其中的10条,以降低运行程序所需的时间对每个循环进行前10次迭代-java,java,foreach,jsoup,Java,Foreach,Jsoup,我目前有以下代码。我希望只进行for each循环的前10次迭代,将DogDetail添加到TableView中,而不是从网页中提取的记录量 例如:如果一只狗有50条历史记录,我只想得到其中的10条,以降低运行程序所需的时间 public void loadHistory() throws IOException{ //races = new ArrayList<Race>(); Dog dog = (Dog)tblRunners.getSelectionModel
public void loadHistory() throws IOException{
//races = new ArrayList<Race>();
Dog dog = (Dog)tblRunners.getSelectionModel().getSelectedItem();
String selectedDog = dog.getName();
lblRunner.setText(selectedDog);
//getHistory
String dogPage = "http://www.gbgb.org.uk/raceCard.aspx?dogName=" + selectedDog;
Document doc1 = Jsoup.connect(dogPage).get();
Element tblHeader = doc1.select("table.MasterTable_Web20 tbody").first();
List<DogDetail> data = new ArrayList<>();
for (Element element1 : tblHeader.children()){
DogDetail dogDetail = new DogDetail();
dogDetail.setDate(element1.select("td:eq(0)").text());
// System.out.println((element1.select("td:eq(0)").text()));
dogDetail.setDistance(element1.select("td:eq(2)").text());
dogDetail.setFin(element1.select("td:eq(4)").text());
dogDetail.setTrack(element1.select("td:eq(7)").text());
String raceURLlong1 = (element1.select("td:eq(14)").html());
String raceURLlong2 = raceURLlong1.replace("<a href=\"","");
String raceURL = "http://www.gbgb.org.uk/" + raceURLlong2.replace("\">View Race</a>","");
data.add(dogDetail);
Document document = Jsoup.connect(raceURL).get();
XElements element = Xsoup.compile("//*[@id=\"content\"]/table[2]/tbody/tr[2]/td/table/tbody/tr/td[2]/table[1]/tbody/tr/td[4]").evaluate(document);
// Get text content
String textContent = element.getElements().get(0).childNode(0).toString();
// Extract time portion
String time = textContent.trim().replaceAll("\\ \\;",
" ").split("\\s+")[1];
dogDetail.setTime(time);
}
// TableView<DogDetail> tblHistory = new TableView<DogDetail>(FXCollections.observableArrayList(data));
// tblHistory.setItems();
ObservableList<DogDetail> tmp2 = FXCollections.observableArrayList(data);
tblHistory.setItems(tmp2);
}
您已经发布了许多与实际问题无关的代码,但仍然缺少关键部分:tblHeader.children的返回类型。我假定它是一张单子。在这种情况下,应更换以下部件:
for (Element element1 : tblHeader.children()) {
与
您已经发布了许多与实际问题无关的代码,但仍然缺少关键部分:tblHeader.children的返回类型。我假定它是一张单子。在这种情况下,应更换以下部件:
for (Element element1 : tblHeader.children()) {
与
将控制变量用作for循环的一部分或for循环之外的变量:
// Make sure to account for cases where there are less than 10 children
for ( int i = 0; i < 10 || i == tblHeader.getChildren().size(); i++ ) {
Element element = tblHeader.getChildren().get(i);
[...]
}
将控制变量用作for循环的一部分或for循环之外的变量:
// Make sure to account for cases where there are less than 10 children
for ( int i = 0; i < 10 || i == tblHeader.getChildren().size(); i++ ) {
Element element = tblHeader.getChildren().get(i);
[...]
}
在for each循环的正上方,按照Kakarot所说的操作并初始化一个整数计数器:
int forCounter = 0;
在for-each循环中,可能将此计数器作为循环的最后一行递增,尽管从技术上讲,这与执行此操作的位置无关
forCounter++;
然后,作为for-each循环的第一行,检查计数器是否达到了所需的最大迭代次数,如果达到,则中断
if (forCounter >= maxIterations) break;
仅供参考,这是一个练习,说明为什么使用for循环可能比使用for each循环更好。就在for each循环的上方,按照Kakarot所说的操作并初始化一个整数计数器:
int forCounter = 0;
在for-each循环中,可能将此计数器作为循环的最后一行递增,尽管从技术上讲,这与执行此操作的位置无关
forCounter++;
然后,作为for-each循环的第一行,检查计数器是否达到了所需的最大迭代次数,如果达到,则中断
if (forCounter >= maxIterations) break;
仅供参考,这是一个练习,说明为什么使用for循环可能比使用for-each循环更好。您的程序在什么方面还不能完成此任务?使用整数计数器并在达到10.Hi时中断。不过我不知道该把柜台放在哪里?目前,我似乎只是将同一条记录打印了10次,而不是前10条记录……您的程序以何种方式无法完成此任务?使用整数计数器,当它达到10.Hi时中断。不过我不知道该把柜台放在哪里?目前,我似乎只是把同一张唱片打印了10次,而不是前10张唱片……太完美了。这正是我想要的。我想我需要对循环和中断做更多的研究!再次感谢。ListsubList是一种专门提供的方法,它不需要到达普通for循环或像计数器和break.Perfect这样的hack。这正是我想要的。我想我需要对循环和中断做更多的研究!再次感谢。ListsubList是一种专门提供的方法,它不需要到达普通for循环或像计数器和break这样的hack。