I have a method shown in the code below, I have a hashmap buffer and queue with several list in both. I want to search a particular message to set it true when it is stable; the message could be in either the buffer or queue. is it alright to lump the two for loop within a single method? or is there a better way to put the method to reflect my intention.
so if the message is in the buffer, it is set to true, if not it checks the queue; if not found it returns false
public static boolean SetMessageToStable(int event_actor, Message msg) {
if (mBuffer.get(event_actor) != null) {
for (int i = 0; i < mBuffer.get(event_actor).size(); i ) { // iterate the list of event actor to find matching message
if (mBuffer.get(event_actor).get(i).equals(msg)) {
mBuffer.get(event_actor).get(i).setMsg_stable(true); // set stable if found
return true;
}
}
}
if (DQ.get(event_actor) != null) {
for (int i = 0; i < DQ.get(event_actor).size(); i ) { // search the event actor's DQ if the message has not been found
if (DQ.get(event_actor).get(i).equals(msg)) {
DQ.get(event_actor).get(i).setMsg_stable(true); // set stable if found
return true;
}
}
}
return false;
}
CodePudding user response:
Is it alright to lump the two for loop within a single method?
Sure.
Is there a better way to put the method to reflect my intention?
The two loops are identical with the exception of the specific map that is being evaluated (DQ vs mBuffer). You could easily do this:
public static boolean SetMessageToStable(int event_actor, Message msg) {
return SetMessageToStableInternal(mBuffer, event_actor, msg)
|| SetMessageToStableInternal(DQ, event_actor, msg);
}
private static boolean SetMessageToStableInternal(
Map<Integer, List<Message>> map,
int event_actor,
Message msg
) {
List<Message> msgList = map.get(event_actor);
if (msgList != null) {
for (int i = 0; i < msgList.size(); i ) {
Message m = msgList.get(i);
if (m.equals(msg)) {
m.setMsg_stable(true);
return true;
}
}
}
return false;
}