我可以在一个循环中使用多个for循环吗?
Can I use multiple for loop in a loop?
我正在尝试生成以下报告:
| Place Name | City or Town? | Country |
----------------------------------------------
| Place A | City | England |
| Place B | City | England |
| Place X | Town | England |
| Place Y | Town | England |
| Place Q | City | Germany |
| Place P | City | Germany |
| Place T | Town | Germany |
| Place W | Town | Germany |
在生成此报告时,我传递了 countryList
,每个国家/地区都有一个 cityList
,如下所示:
for(Country country : countryList)
{
for(City city : country.getCityList())
{
generateRow(country, city);
}
}
另一方面,还有另一个(单独的)列表保留城镇,我需要在每个城市之后生成城镇行,如上所示。在这个场景中,我认为唯一的方法是在城市循环之后使用第二个 for 循环,如下所示,但因为我从来没有在循环中使用过这种多重循环(我多次使用级联/嵌套,但不是这样), 如果有更好的选择,我想得到澄清。
for(Country country : countryList)
{
for(City city : country.getCityList())
{
generateRow(country, city);
}
// townList is a separate list, not in country or city list
for(Town town : townList())
{
generateRowForTown(town);
}
}
有更好的方法吗?
您的解决方案非常好。话虽这么说,你可以让 Town
和 City
都实现一些 Liveable
或 RowGenerator
接口或超级 class (名称取决于你将要放入的内容那里)有一个 generateRow()
方法。这将允许您将 Town
和 City
实例存储在单个 List<RowGenerator>
字段或变量中,从而允许您在一个循环中处理它们。就性能而言,这不会改变任何明显的东西,但这是一个考虑的选项,以备将来可能遇到的此类情况。
我正在尝试生成以下报告:
| Place Name | City or Town? | Country |
----------------------------------------------
| Place A | City | England |
| Place B | City | England |
| Place X | Town | England |
| Place Y | Town | England |
| Place Q | City | Germany |
| Place P | City | Germany |
| Place T | Town | Germany |
| Place W | Town | Germany |
在生成此报告时,我传递了 countryList
,每个国家/地区都有一个 cityList
,如下所示:
for(Country country : countryList)
{
for(City city : country.getCityList())
{
generateRow(country, city);
}
}
另一方面,还有另一个(单独的)列表保留城镇,我需要在每个城市之后生成城镇行,如上所示。在这个场景中,我认为唯一的方法是在城市循环之后使用第二个 for 循环,如下所示,但因为我从来没有在循环中使用过这种多重循环(我多次使用级联/嵌套,但不是这样), 如果有更好的选择,我想得到澄清。
for(Country country : countryList)
{
for(City city : country.getCityList())
{
generateRow(country, city);
}
// townList is a separate list, not in country or city list
for(Town town : townList())
{
generateRowForTown(town);
}
}
有更好的方法吗?
您的解决方案非常好。话虽这么说,你可以让 Town
和 City
都实现一些 Liveable
或 RowGenerator
接口或超级 class (名称取决于你将要放入的内容那里)有一个 generateRow()
方法。这将允许您将 Town
和 City
实例存储在单个 List<RowGenerator>
字段或变量中,从而允许您在一个循环中处理它们。就性能而言,这不会改变任何明显的东西,但这是一个考虑的选项,以备将来可能遇到的此类情况。