HashMapで使用するイテレーターがあり、イテレーターを保存してロードします。 Iteratorを使用してHashMapの以前のキーを取得する方法はありますか? (Java.util.Iterator)
これをRed5接続の属性として保存してからロードし直して、停止したところから作業を続行します。
HashMapのキーセットを反復処理しています
他の人が指摘したように、直接ではありませんが、たとえば以前の1つの要素にアクセスする必要がある場合は、別の変数に簡単に保存できます。
T previous = null;
for (Iterator<T> i = map.keySet().iterator(); i.hasNext();) {
T element = i.next();
// Do something with "element" and "previous" (if not null)
previous = element;
}
ListIterator
の代わりにIterator
を使用できます。 ListIteratorにはprevious()
およびhasPrevious()
メソッドがあります。
Iteratorインターフェースで提供されるものではなく、 ListIterator に似た配列セマンティクスが必要なようです。そのようなものを取得する最も簡単な方法は、(キーセット(LinkedList<K> keyList = new LinkedList<K>(map.keySet())
)から)リストを作成し、通常のイテレーターまたはforeachの代わりに手動でListIteratorを使用することです。
連続したアイテムを覚える必要がある非常に単純なケースでは、これを処理する最も簡単な方法は、前のキーをローカル変数に格納し、ループの最後でそれを更新することです。
いいえ、 Iterator<E>
は、3つのメソッドのみを定義します。
boolean hasNext()
E next()
void remove()
もちろん、独自のイテレータを実装することもできます。
Set
はリバースイテレータのメソッドを提供しませんが、 Deque
は提供します。イテレータには descendingIterator()
をreverseの順序で使用できます iterator()
、forwards順のイテレータの場合。
(_Deque<T> deque = new LinkedList<T>(set)
を介してDeque
からSet
を作成できます。ここで、set
はSet
であり、T
は使用しているジェネリック型です。)
結局、Iterator
sはあなたの仕事に完全には適していません。
List
からSet
を作成して(たとえば、List list = new LinkedList(set)
を介して)、標準のインデックス付きforループを使用して繰り返しませんか?これにより、前の要素がi - 1
にあることがわかります。
他の人が言ったように、next()
を使用して要素にアクセスするだけです。ただし、それは一種用語の問題です。 next()
を呼び出すと、this isは現在の要素です。
問題でない限り、各反復でコレクション内の2つの連続する項目を確認する必要があります。その場合、単純な変数が最も簡単に見えます。
いいえ、できません。 Iteratorインターフェイスには、前の要素を取得するメソッドがありません。
しかし、あなたができることは-少しゴミ-List<Entry<Integer, YourObjectType>>
ここで、Integer
- valueはキーオブジェクトのハッシュコードを表します。その後、次のようなことができます:
for (int i = 0; i < list.size(); i++)
{
YourObjectType current = list.get(i).getValue();
YourObjectType previous = (i == 0 ? null : list.get(i - 1).getValue());
// Do whatever you want
}
これは非常にごみですが、それは可能です
イテレータを使用して、以前のキー値を取得するオプションはありません。 hasNext()およびnext()メソッドのみがあります。
独自のイテレーターを作成します。
public class EnhancedIterator<E> implements Iterator<E>{
private List<E> list;
private int indexSelected=-1;
public EnhancedIterator(List<E> list){
this.list=list;
}
@Override
public boolean hasNext() {
return indexSelected<list.size()-1;
}
@Override
public E next() {
indexSelected++;
return current();
}
@Override
public void remove() {
list.remove(indexSelected);
}
public void remove(int i){
list.remove(i);
if(i<indexSelected){
indexSelected--;
}
}
public E previous(){
indexSelected--;
return current();
}
public E current(){
return list.get(indexSelected);
}
public E get(int i){
return list.get(i);
}
}