A Queue
- это Collection
, поэтому вы всегда можете скопировать его элементы в другой Collection
, который позволяет получить заказ, например,
List<YourType> copy = new ArrayList<YourType>(yourQueue);
if(copy.indexOf(obj1)<copy.indexOf(obj2)){
// some code here
}
Конечно, это ужасно неэффективно, но это работает.(Вам, вероятно, придется синхронизировать очередь при этом)
Другим способом было бы сделать это через iterator()
:
/**
* Returns -1 if a occurs in the collection before b, 1 if b occurs before a
* and 0 otherwise.
*/
public static <T> int comparePositionInCollection(final T a,
final T b,
final Collection<T> collection){
// todo: check for a==null, b==null, a.equals(b)
final Iterator<T> iterator = collection.iterator();
boolean foundA = false;
boolean foundB = false;
int result = 0;
while(iterator.hasNext()){
final T t = iterator.next();
if(a.equals(t)){
if(foundB){
result = 1;
break;
}
foundA = true;
} else if(b.equals(t)){
if(foundA){
result = -1;
break;
}
foundB = true;
}
}
return result;
}
Конечно, вам придется синхронизировать очередьдо доступа к итератору, так что это также ужасно неэффективно.