对每个循环进行前10次迭代-java

对每个循环进行前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

我目前有以下代码。我希望只进行for each循环的前10次迭代,将DogDetail添加到TableView中,而不是从网页中提取的记录量

例如:如果一只狗有50条历史记录,我只想得到其中的10条,以降低运行程序所需的时间

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("\\&nbsp\\;",
                " ").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。