检测最后的foreach循环迭代

时间:2017-01-11 12:34:08

标签: java algorithm collections

假设我有这样的foreach循环:

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

//some code

for (String name: names) {

     //some code

}

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

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

8 个答案:

答案 0 :(得分:18)

为了简单易懂,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 
        }
     }

此外,这取决于您要实现的目标。假设您正在实现用逗号分隔每个名称的通用用例,但不要在末尾添加空的逗号:

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(", "));

答案 1 :(得分:14)

没有,请看How does the Java 'for each' loop work?

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

答案 2 :(得分:10)

其他问题完全足够,只需为给定问题添加此解决方案。

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

   //some code
   int i = 0;

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

}

答案 3 :(得分:0)

没有构建方法来检查当前元素是否也是最后一个元素。除此之外,您使用的HashSet不保证退货订单。即使你想检查它,例如索引i的最后一个元素可能总是不同的。

答案 4 :(得分:0)

Set不保证其中的商品的订单。您可以遍历Set一次并检索&#34; abc&#34;作为&#34;最后一项&#34;下次你可能会发现&#34; hij&#34;是&#34;最后一项&#34;在Set

话虽如此,如果你不关心秩序,你只想知道什么是任意的&#34;最后一项&#34;就是在当前时刻观察Set时,没有内置的方法来做到这一点。你必须使用一个柜台。

答案 5 :(得分:0)

上面答案中的

.map(String :: toString)是多余的,因为HashSet已经包含字符串值。不要使用Set来连接字符串,因为不能保证顺序。

List<String> nameList = Arrays.asList("Michael", "Kate", "Tom");
String result = nameList.stream().collect(Collectors.joining(", "));

答案 6 :(得分:0)

如果您使用的是复杂对象,而不仅仅是简单的列表/集,则下面的代码可能会有所帮助。只需添加一个map函数即可在收集之前实际获取所需的字符串。

String result = violations.stream().map(e->e.getMessage()).collect(Collectors.joining(", "));

答案 7 :(得分:0)

有一种简单的方法可以使您抛出一个条件。 认为这是您的数组:

int odd[] = {1,3,5,7,9,11};

,您希望将所有内容全部打印成一行,并在最后一行之间加上“-”连字符。

for(int aa:odd) {
    System.out.print(aa);
            
    if(odd[odd.length - 1] != aa)
        System.out.print(" - ");
}

这种情况

if( odd[odd.length - 1] != aa )

将检查您是否不在最后一个元素中,因此您仍可以添加“-”,否则将不添加它。