有没有一种优雅的方法可以对Java中for-each循环的最后一个元素做些什么?

2022-09-02 22:47:39

我使用的是Java 6。

假设我有一群猫要喂,假设myCats被分类了。

for (Cat cat : myCats) {

    feedDryFood(cat);

    //if this is the last cat (my favorite), give her a tuna
    if (...) 
        alsoFeedTuna(cat);
}

我想特别对待我的最后一只猫。

有没有办法在循环中优雅地做到这一点?我能想到的唯一方法就是计算它们。

退后一步以获得更广阔的画面,是否有任何编程语言可以在for-each循环中支持这个小功能?


答案 1

如果需要执行此操作,最好的方法可能是使用迭代器。除此之外,你必须数数。迭代器有一个

hasNext()

方法,可用于确定您是否位于迭代的最后一项上。

编辑 -- 为了提高可读性,您可以在基于迭代器的循环 (psuedo) 中执行以下操作:

Cat cat = iter.next();
feedDryFood(cat);

boolean shouldGetTuna = !iter.hasNext();
if (shouldGetTuna) 
    alsoFeedTuna(cat)

这是通过巧妙地使用变量名称来相当自我记录的代码。


答案 2

@fbcocq的解决方案

这是一个糟糕的解决方案吗?只需添加另一个局部变量。

Cat lastCat = null;

for (Cat cat : myCats) {
  feedDryFood(cat);
  lastCat = cat;
}

alsoFeedTuna(lastCat);

编辑:首先设置空值以处理myCats未设置lastCat的情况