SORU
20 Ocak 2010, ÇARŞAMBA


Java tersten bir liste boyunca yineleme

Kod parçası jenerik yararlanmak için geçiş yapıyorum. Bunu yapmak için bir bağımsız değişken için döngü dizinleri kayıtlarını tutmak, apaçık bir yineleyici kullanarak daha çok daha temiz olmasıdır.

Yaklaşık yarım durumlarda, list (ArrayList) bir dizin kullanarak tersten tekrarlanır.

Birisi Bu koleksiyon ile çalışırken döngü endeksli sevmediğim beri) yapmak için daha temiz bir yol önerebilirsiniz?

 for (int i = nodes.size() - 1; i >= 0; i--) {
    final Node each = (Node) nodes.get(i);
    ...
 }

Not:Bu yapışkan notlar dışında herhangi bir yeni bağımlılıkları eklemek istemiyorum.

Kabul cevabı aldı ve döndü:

class ListReverser<T> implements Iterable<T> {
    private ListIterator<T> listIterator;        

    public ListReverser(List<T> wrappedList) {
        this.listIterator = wrappedList.listIterator(wrappedList.size());            
    }               

    public Iterator<T> iterator() {
        return new Iterator<T>() {

            public boolean hasNext() {
                return listIterator.hasPrevious();
            }

            public T next() {
                return listIterator.previous();
            }

            public void remove() {
                listIterator.remove();
            }

        };
    }

}

Olarak kullanılabilir:

for (final Node each : new ListReverser<Node>(nodes)) {
   //...
}

Harika, ama daha iyi değil.

CEVAP
20 Ocak 2010, ÇARŞAMBA


Bunu deneyin:

// Substitute appropriate type.
ArrayList<...> a = new ArrayList<...>();

// Add elements to list.

// Generate an iterator. Start just after the last element.
ListIterator li = a.listIterator(a.size());

// Iterate in reverse.
while(li.hasPrevious()) {
  System.out.println(li.previous());
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011
  • Tube Time

    Tube Time

    14 Mayıs 2013