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

时间:2012-03-09 12:21:47

标签: java iterator

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

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

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

9 个答案:

答案 0 :(得分:30)

如果iter.hasNext()iter.next()之后为,那么它就是最后一项。

快乐的编码。

答案 1 :(得分:30)

您可以像在while条件中一样检查它:

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

答案 2 :(得分:12)

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

使用StrBuilderapache 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的最后一个元素上,而是检查你是否在处理第一个元素。如果不是第一个元素,则追加分隔符然后追加当前元素。

答案 5 :(得分:2)

这个问题很老,答案很好,但我用这个答案来弄清楚如何在列表项之间添加逗号并添加列表分隔符的结尾。如果像我这样的其他人在这里寻找同样的事情,那就是我所做的:

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();
}

答案 6 :(得分:0)

这个怎么样:

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

如果您无法访问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 = "~!~";
}