1

所以我需要管理一堆日志文件以获取唯一 ID。对于我的地图,我希望唯一的 ID 是关键。但是,我需要管理的日志文件可能包含每个 ID 的多个条目。

所以我的问题是我将如何去做这样的事情:

地图(唯一 ID,(事件队列))

因此,每次我在日志中遇到唯一 ID 的新事件时,我将如何将该事件添加到相应键的队列中。

编辑:例如:

Event e = new Event();
map.put(e.ID, queue.add(e)); 

类似的东西?

4

3 回答 3

0

你做这样的事情:

Event e = new Event();

// get queue from map
Queue<Event> eventQueue = map.get(e.ID);

if(eventQueue == null){
    // no queue existed in map with e.ID
    // create new queue, add to map
    eventQueue = new LinkedList<Event>();
    map.put(e.ID, eventQueue); 
}

// add event in queue
eventQueue.add(e);

您的队列可以是特定的队列实现,例如LinkedListor ArrayBlockingQueue,所以

eventQueue = new LinkedList<Event>();

或者

eventQueue = new ArrayBlockingQueue<Event>();
于 2013-10-20T05:07:54.067 回答
0

Event声明对象队列。

Queue<Event> queue=new LinkedList<>();
..........
..........

Map声明key作为idString类型)和队列作为值:

Map<String, Queue<Event>> map = new HashMap<>();

现在介绍如何向地图添加事件:

if(map.contains(id)){
  queue = map.get(e.ID);
  queue.offer(event);
}
else{
    queue=new LinkedList<>();
    map.put(id, queue);
    queue.offer(event);
} 
于 2013-10-20T05:13:08.007 回答
0

下面的代码段将为您提供有关如何执行此操作的想法。请注意,此代码没有考虑并发性,因此如果您的代码是多线程的,您可能需要在访问 map 周围添加一些同步逻辑。此外,使用的底层 Queue 数据结构将取决于您打算如何使用此队列。

Queue<Event> queue;
if(map.contains(e.ID)){
  queue = map.get(e.ID);
} else{
  queue = new ArrayBlockingQueue<Event>();
  map.put(queue);
}
queue.add(e);
于 2013-10-20T05:02:46.523 回答