У меня есть класс и список экземпляров, который выглядит примерно так (имена полей изменены для защиты невинных/проприетарных):
public class Bloat
{
    public long timeInMilliseconds;
    public long spaceInBytes;
    public long costInPennies;
}
public class BloatProducer
{
    final private List<Bloat> bloatList = new ArrayList<Bloat>();
    final private Random random = new Random();
    public void produceMoreBloat()
    {
       int n = bloatList.size();
       Bloat previousBloat = (n == 0) ? new Bloat() : bloatList.get(n-1);
       Bloat newBloat = new Bloat();
       newBloat.timeInMilliseconds = 
          previousBloat.timeInMilliseconds + random.nextInt(10) + 1;
       newBloat.spaceInBytes = 
          previousBloat.spaceInBytes + random.nextInt(10) + 1;
       newBloat.costInPennies = 
          previousBloat.costInPennies + random.nextInt(10) + 1;
       bloatList.add(newBloat);
    }
    /* other fields/methods */
    public boolean testMonotonicity()
    {
    Bloat previousBloat = null;
    for (Bloat thisBloat : bloatList)
            {
               if (previousBloat != null)
               {
                  if ((previousBloat.timeInMilliseconds 
                     >= thisBloat.timeInMilliseconds)
                   || (previousBloat.spaceInBytes 
                     >= thisBloat.spaceInBytes)
                   || (previousBloat.costInPennies
                     >= thisBloat.costInPennies))
                       return false;
               }
               previousBloat = thisBloat;
           }
           return true;
    }
BloatProducer bloatProducer;
Список bloatList хранится внутри BloatProducer и поддерживается таким образом, что он только добавляет новые записи Bloat, не изменяет ни одного из старых, и каждое из полей монотонно увеличивается, например bloatProducer.testMonotonicity() всегда будет возвращать true.
Я хотел бы использовать Collections.binarySearch(list,key,comparator) для поиска записи Bloat с помощью полей timeInMilliseconds, spaceInBytes или costInPennies. (и если число находится между двумя записями, я хочу найти предыдущую запись)
Какой самый простой способ написать серию из 3 классов Comparator, чтобы заставить это работать? Должен ли я использовать ключ, который является объектом Bloat с фиктивными полями для тех, которые я не ищу?
