迭代Java列表 - 如何识别最终元素?

时间:2013-12-12 12:22:13

标签: collections java-6

我有一个列表例如

{ "in" , "out", "rec", "auth" } 

...但是列表的内容是不可预测的。

当迭代列表列表时,我们怎么知道我们已经到达最后一个元素? 我想为最后一个元素应用不同的逻辑。

3 个答案:

答案 0 :(得分:0)

示例:List list = new ArrayList是列表,您不需要遍历获取最后一个(元素,您可以通过list.get(list.size() - 1获取它)并执行您想要的逻辑。 / p>

答案 1 :(得分:0)

迭代Java List的“经典”方法是使用List.iterator()获取Iterator,然后使用Iterator的方法逐步完成列出值。

这适用于任何实现Iterable的内容,而不仅仅是列表。

 // assuming myList implements Iterable<Type>
 Iterator<Type> iterator = myList.iterator();
 while(iterator.hasNext()) {
      doSomethingWith(iterator.next())
 }

从JDK 1.5开始,语言中就有了一个快捷方式来实现同样的目标:

 // assuming myList implements Iterable<Type>
 for(Type item : myList) {
      doSomethingWith(item);
 }

但是,虽然在许多情况下都很方便,但这种语法并不能让您完全访问Iterator所拥有的所有信息。

如果要特别处理列表的最后一个元素,可以使用以下方法之一:

 Iterator<Type> iterator = myList.iterator();
 while(iterator.hasNext()) {
      Type item = iterator.next();
      if(iterator.hasNext() {
         doSomethingWith(item);
      } else {
         // last item
         doSomethingElseWith(item);
      }
 }

您的具体情况 - 创建列表的逗号分隔字符串表示形式,不带尾随逗号:

 Iterator<String> iterator = myList.iterator();
 StringBuilder buffer = new StringBuilder();
 while(iterator.hasNext()) {
      buf.append(iterator.next());
      if(iterator.hasNext() {
         buf.append(",")
      } 
 }

所有这些都假设您有理由避免使用list.size()。

答案 2 :(得分:0)

您应该考虑使用LinkedList而不是ArrayList。它有getLast()方法。