检测最后的foreach循环迭代

mhe*_*ery 29 java algorithm collections

假设我有这样的foreach循环:

Set<String> names = new HashSet<>();

//some code

for (String name: names) {

     //some code

}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查内部foreach实际名称是Set没有计数器的最后一个?

(对不起,如果这是一个重复的问题,我在这里找不到这样的问题)

Joa*_*ira 25

为了简单和易懂,imo会做:

Set<String> names = new HashSet<>();
Iterator<String> iterator = names.iterator();
    while (iterator.hasNext()) {
        String name = iterator.next();
        //Do stuff
        if (!iterator.hasNext()) {
            //last name 
        }
     }
Run Code Online (Sandbox Code Playgroud)

此外,这取决于你想要达到的目标.假设您正在实现通过昏迷分隔每个名称的常见用例,但最后不要添加空昏迷:

Set<String> names = new HashSet<>();
names.add("Joao");
names.add("Pereira");

//if the result should be Joao, Pereira then something like this may work
String result = names.stream().collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

  • 常见的情况正是我所需要的。谢谢 (3认同)

Laz*_*vic 15

没有,看看每个'循环的Java'如何工作?

您必须更改循环以显式使用迭代器或使用int计数器.


小智 12

其他的回答是完全足够的,只需为给定的问题添加此解决方案.

Set<String> names = new HashSet<>();

   //some code
   int i = 0;

for (String name: names) {
    if(i++ == names.size() - 1){
        // Last iteration
    }
   //some code

}
Run Code Online (Sandbox Code Playgroud)

  • 我将调整为`if(++ i == names.size())`,它只是在评估之前向i添加一个,这意味着我们可以直接检查set的大小,而不是-1 (4认同)