如何检查是否处理迭代程序中的最后一项



如果我有一个迭代器,并且我想检查最后一个值,我该如何检查它?像

private Set<String> saarcCountries = new TreeSet<String>();
Iterator iter = saarcCountries.iterator();
while(iter.hasNext()) {
    String name = (String)iter.next();
    int countryId = Integer.parseInt(name);
    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(countryId);
    newsOrAnnouncementInsert.add(1);            //addby
    if (!(last value in iterator))) {
        newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
    }//end if
} //end of while

如何检查最后一个值。迭代器中的最后一个值应该用什么替换?

如果iter.hasNext()iter.next()之后为false,则它是最后一项。

快乐的编码。

您可以像在while条件下一样进行检查:

if ( ! iter.hasNext()) {
    // last iteration
    ...
}

这个答案不是特定于迭代器的,但可以用于任何需要在项之间插入分隔符的迭代语句。它不需要知道当前的索引,也不需要任何条件。

String previousSeparator = "";
for (String value : collection) {
  System.err.println(previousSeparator + value);
  previousSeparator = ",";
}

虽然其他答案给出了一些想法,但我认为最好在不带条件的情况下添加它,并在while循环终止后删除最后一个分隔符。

使用StrBuilder(一个apache commons lang类)作为newsOrAnnouncementInsert的类型。然后使用StrBuilder.appendSeperator()方法。

例如

StrBuilder newsOrAnnouncementInsert = new StrBuilder();
while (iterator.hasNext())
{
    newsOrAnnouncementInsert.appendSeperator("~!~");
    String name = (String)iter.next();
    int countryId = Integer.parseInt(name);
    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(countryId);
    newsOrAnnouncementInsert.add(1);
}

appendSeperator仅在缓冲区当前不是空的情况下(在这种情况下,如果这是第一次通过循环)添加分隔符。

基本上,您想要反转比较。不要检查是否在itnerator的最后一个元素上,而是检查是否没有处理第一个元素。如果不是第一个元素,则附加分隔符,然后附加当前元素。

这个问题很老,答案很好,但我用这个答案来计算如何在列表项之间添加逗号和添加列表末尾分隔符。如果像我这样的人也在寻找同样的东西,我会这样做:

public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("List contains:n");
    Iterator<String> iterator = list.iterator(); 
    while(iterator.hasNext()){
        // Get the next element.
        sb.append(iterator.next());
        // If there is another element add a comma.
        if(iterator.hasNext()){
            sb.append(", ");
        }else{
            sb.append(" ~!~");
        }
    }
    return sb.toString();
}

这个怎么样:

if (!(iter.hasNext())) {
    newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
}

您可以使用hasNext方法来检查这是否是最后一个值。如果没有任何下一个值,这意味着它是最后一个值。

如果您没有访问Iterator的权限,可以使用这种方法。

boolean afterFirst = false;
for(String name : saarcCountries) {
    if(afterFirst)
       newsOrAnnouncementInsert.add("~!~");
    afterFirst = true;
    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(name);
    newsOrAnnouncementInsert.add(1);
} 

说它是StringBuilder

StringBuilder newsOrAnnouncementInsert = new StringBuidler();
String sep = "";
for(String name : saarcCountries) {
    newsOrAnnouncementInsert.append(sep + newsId + name + 1);
    sep = "~!~";
} 

最新更新