在Java列表上迭代-我如何识别最后一个元素



我有一个列表,例如

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

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

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

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

迭代Java List的"经典"方法是使用List.iterator()获得Iterator,然后使用Iterator的方法逐步遍历列表值。

这适用于任何实现Iterable的东西,而不仅仅是Lists。

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

自JDK1.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().

您应该考虑使用ArrayList的LinkedList instad。采用getLast()方法。

最新更新