我仍在学习如何使用 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);
}
如果我理解正确的话,这两行代码都会遍历整个 SortedSet _set。
第一行添加 _set 中的所有消息,其中每条消息的属性 0 小于 epochWindowTime。
第二行从 _set 中删除消息的属性 0 小于 epochWindowTime 的任何消息。
如果我要在 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();
我的理解和实施正确吗?