LinQ を使用して C# コードを標準 Java に変換する方法をまだ学んでいます。私は現在、次のことに取り組んでいます。
// For reference
private SortedSet<Message> _set = new SortedSet<Message>(new MessageSentTimeStampComparer())
List<Message> messages = new List<Message>();
//
lock (_setLock)
{
messages.AddRange(_set.Where((m) => long.Parse(m.Attribute[0].Value) < epochWindowTime));
_set.RemoveWhere((m) => long.Parse(m.Attribute[0].Value) < epochWindowTime);
}
私がこれを正しく理解していれば、これら 2 行のコードは両方とも SortedSet _set 全体を反復処理します。
最初の行は、各メッセージの属性 0 が epochWindowTime より小さい _set 内のすべてのメッセージを追加します。
2 行目は、メッセージの属性 0 が epochWindowTime より小さいメッセージを _set から削除します。
この機能を Java で複製する場合、次のようにします。
_setLock.lock();
Iterator<Message> _setIter = _set.iterator();
//TODO
while(_setIter.hasNext())
{
Message temp = _setIter.next();
Long value = Long.valueOf(temp.getAttributes().
get("Timestamp"));
if(value.longValue() < epochWindowTime)
{
messages.add(temp);
_set.remove(temp);
}
}
_setLock.unlock();
私の理解と実装は正しいですか?