在增强型for循环中,当循环类型为“1”时,如何跳过第一个索引;javafx.scene.control.Tab“;?

在增强型for循环中,当循环类型为“1”时,如何跳过第一个索引;javafx.scene.control.Tab“;?,java,javafx,foreach,Java,Javafx,Foreach,我试图设置tabid,每个选项卡都从一个名为entityList的列表中获取其Id和文本。问题是选项卡的数量取决于这个entityList的大小+一个额外的第一个选项卡(用户在其中输入entityList),我做得很好,只是第一个选项卡应该始终命名为“Overview” 我知道如何设置,但我不知道如何跳过增强for循环中的第一个选项卡(以便它从第二个选项卡开始设置ID,该选项卡将包含entityList的第一个字符串)。以下是我的方法: @FXML public void currentTabI

我试图设置tabid,每个选项卡都从一个名为entityList的列表中获取其Id和文本。问题是选项卡的数量取决于这个entityList的大小+一个额外的第一个选项卡(用户在其中输入entityList),我做得很好,只是第一个选项卡应该始终命名为“Overview”

我知道如何设置,但我不知道如何跳过增强for循环中的第一个选项卡(以便它从第二个选项卡开始设置ID,该选项卡将包含entityList的第一个字符串)。以下是我的方法:

@FXML
public void currentTabIndex() {
    ObservableList<Tab> tabID = mainTabPane.getTabs();
    int i=0;
    //tabID.get(0).setId("Overview"); --> can't figure out where this should be placed
    //tabID.get(0).setText("Overview"); --> and this too

    for (Tab loop:tabID) {
        for(;i<tabID.size()-1;) {
            loop.setId(entityList.get(i).getEntitytName());
            loop.setText(entityList.get(i).getEntitytName());
            i++;
            break;
        }
    }   
}
@FXML
public void currentTabIndex(){
ObservableList tabID=mainTabPane.getTabs();
int i=0;
//tabID.get(0).setId(“概述”);-->无法确定应将其放置在何处
//tabID.get(0.setText(“概述”);-->还有这个
for(选项卡循环:tabID){
对于(;i为您的案例提供一个方法,您可以从
OvbservableList
中获取
stream()
,使用后如下所示:

  tabID.stream().skip(1).forEach(loop->{
             loop.setId(entityList.get(i).getEntitytName());
             loop.setText(entityList.get(i).getEntitytName());
             i++;

        });
skip
参数:要从1开始跳过的前导元素数

编辑:基于@Radiodef注释

出于某些原因,如果您认为增强的
For
循环对您来说是必要的,则可以将代码转换为:

   for (Tab loop : (Iterable<Tab>) tabID.stream().skip(1)::iterator) {
        ......
}
for(Tab循环:(Iterable)tabID.stream().skip(1)::迭代器){
......
}
为您的案例提供一个方法,您可以从您的
OvbservableList
中获取
流()
,使用后如下:

  tabID.stream().skip(1).forEach(loop->{
             loop.setId(entityList.get(i).getEntitytName());
             loop.setText(entityList.get(i).getEntitytName());
             i++;

        });
skip
参数:要从1开始跳过的前导元素数

编辑:基于@Radiodef注释

出于某些原因,如果您认为增强的
For
循环对您来说是必要的,则可以将代码转换为:

   for (Tab loop : (Iterable<Tab>) tabID.stream().skip(1)::iterator) {
        ......
}
for(Tab循环:(Iterable)tabID.stream().skip(1)::迭代器){
......
}

一个简单的解决方案是添加一个变量来跟踪第一个索引是否已处理,如果尚未处理,则跳过循环的迭代

要执行此操作,请更改此代码:

     for (Tab loop:tabID) {
    for(;i<tabID.size()-1;) {
        loop.setId(entityList.get(i).getEntitytName());
        loop.setText(entityList.get(i).getEntitytName());
        i++;
        break;
    }
    }
     boolean skippedFirst = false;
    for (Tab loop:tabID) {
    if(!skippedFirst){
        skippedFirst = true;
        }else {
    for(;i<tabID.size()-1;) {
        loop.setId(entityList.get(i).getEntitytName());
        loop.setText(entityList.get(i).getEntitytName());
        i++;
        break;
    }
    }
    }
for(选项卡循环:tabID){

对于(;i来说,一个简单的解决方案是添加一个变量来跟踪第一个索引是否已处理,如果尚未处理,则跳过循环的迭代

要执行此操作,请更改此代码:

     for (Tab loop:tabID) {
    for(;i<tabID.size()-1;) {
        loop.setId(entityList.get(i).getEntitytName());
        loop.setText(entityList.get(i).getEntitytName());
        i++;
        break;
    }
    }
     boolean skippedFirst = false;
    for (Tab loop:tabID) {
    if(!skippedFirst){
        skippedFirst = true;
        }else {
    for(;i<tabID.size()-1;) {
        loop.setId(entityList.get(i).getEntitytName());
        loop.setText(entityList.get(i).getEntitytName());
        i++;
        break;
    }
    }
    }
for(选项卡循环:tabID){

对于(;i,使用增强的for循环,不可能跳过第一次迭代。可以通过引入检查来解决此问题,但我推荐其他方法:

可以使用迭代器使用常规for循环

for (Iterator<Tab> iterator = tabID.listIterator(1); iterator.hasNext();) {
    Tab loop = iterator.next();

    ...
}

使用增强的for循环,不可能跳过第一次迭代。可以通过引入检查来解决此问题,但我推荐其他方法:

可以使用迭代器使用常规for循环

for (Iterator<Tab> iterator = tabID.listIterator(1); iterator.hasNext();) {
    Tab loop = iterator.next();

    ...
}

if(i==0)
mabye?如果从第一个进程中断,为什么要使用第二个
for
for(Tab循环:tabID.subList(1,tabID.size())
@MenaiAlaEddine第一个循环是遍历tabpane中的每个选项卡,第二个循环是遍历
entityList
,它是实体数据模型的一个数组列表,在每次迭代中包含不同的实体值。据我所知,每个选项卡(循环)都有冗余只有一个
ID
和一个
Text
,我看到他对
循环使用了第二个
,但在第一次迭代后他使用了
break
if(I==0)
mabye?如果从第一个进程中断,为什么要对
使用第二个
@MenaiAlaEddine第一个循环是遍历tabpane中的每个选项卡,第二个循环是遍历
entityList
,它是实体数据模型的一个数组列表,在每次迭代中包含不同的实体值。据我所知,每个选项卡(循环)都有冗余只有一个
ID
和一个
Text
,我看到他对
循环使用了第二个
,但在第一次迭代后使用了
break
。可能只是好奇,但这也可以转换为增强的
for
循环,使用
for(Tab循环:(Iterable)tabID.stream()。跳过(1)::迭代器){…}
。感谢您提供不同的方法,我感谢所有的帮助:)此外,对于我需要添加的其他功能,增强的for循环是必要的,因此跳过(索引)很有帮助。也许只是好奇,但这也可以转换为增强的
for
循环,使用
for(Tab loop:(Iterable)tabID.stream()。跳过(1)::iterator){…}
。感谢您提供了不同的方法,我感谢您提供的所有帮助:)此外,对于我需要添加的其他功能,增强的for循环是必需的,因此skip(index)很有帮助。我更喜欢第二个选项,它工作得很好!我不知道增强的循环有这个限制,谢谢您的帮助!)我更喜欢第二个选项,而且效果很好!我不知道增强循环有这个限制,谢谢所有的帮助!)