2012-03-04 37 views
4

Guavaを使って、カーソルを動かさずに前と次のリストの要素を覗き見ることができる "覗くことができる" ListIteratorを実装します。これはGuavaのPeekingIteratorに似ていますが、GuavaのPeekingIteratorはではなくnext()メソッドしかないため、双方向です。GuavaのForwardingListIteratorとPeekingIteratorを組み合わせることは可能ですか?

これは、新しいPeekingListIteratorクラスを作成することで実装する必要がありますか?または、2つの概念を組み合わせるためのGuavaの方法がありますか?

答えて

14

イテレータに新しい「覗き見る」概念を導入して、両方向にすでに簡単にスクロールできるという価値はどこにありますか?あなたが本当にそれをしたい場合は、ちょうど2つの些細な静的ヘルパー実装することができ

:だから

public static <T> T peekNext(ListIterator<T> iterator) { 
    T next = iterator.next(); 
    iterator.previous(); 
    return next; 
} 

public static <T> T peekPrevious(ListIterator<T> iterator) { 
    T previous = iterator.previous(); 
    iterator.next(); 
    return previous; 
} 
+0

あなたは質問への答えは自分の圧延せずに2つを結合する方法がないということであると言っています ' PeekingListIterator'? 'PeekingIterator'に関する質問と同じ"何が値段 "なのかを簡単に聞くことができましたが、明らかに誰かがその値を見ていましたが、なんらかの理由で' PeekingListIterator'が省略されました。 –

+5

'Iterator'を後方に移動することはできませんが、' ListIterator'を後方に移動することはできます。したがって、 'PeekingIterator'は通常のIteratorで複製できない機能を提供しますが、すべての' ListIterator'を使用して 'PeekingListIterator'と同じ機能を得ることができます。 –

+0

@LouisWassermanそれはとても良い点です+1。 Kevinの質問に直接答えるためには、このシナリオではクライアントコードの明瞭さが重要です。クライアントの観点から、 'next = iterator.peekAtNext()'は 'next = iterator.next();よりも理解しやすい。 iterator.previous(); ' –

関連する問題