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

  • Incredible Tutorials

    Incredible T

    27 EKİM 2006
  • SketchBookPro

    SketchBookPr

    6 Mayıs 2009
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008