2015-03-19 3 views
0

У меня есть список строк, и мне нужно убедиться, что один конкретный элемент всегда находится в списке в списке. Вот иллюстрация. Предполагая, что мой список содержит [действие sicav, droits de souscription, action famille, действия fcp]. Я должен убедиться, что действие «famille» всегда находится на первой позиции, прежде чем произойдет дальнейшая обработка списка.Ограничение элемента списка, который должен быть сверху

Вот как я это сделал:

/** 
* Force this list to alway keep the constrained value on top 
* @param liste 
* @param constraint 
*/ 
public void doConstrainList(List<String> liste, String constraint) { 

    System.out.println("List initial state: " + liste); 
    if (!liste.contains(constraint)) { 
     return; 
    } 

    int indexToProcess = liste.indexOf(constraint); 

    String keeper = constraint; 

    liste.remove(indexToProcess); 
    liste.add(0, keeper); 

    System.out.println("List state after processing:" + liste); 
} 

Когда я называю этот метод с примером списка упоминалось выше, для того же значения ограничений я получаем следующий результат

method invocation result

Так что это работает, как ожидалось, но я хотел бы знать, есть ли лучший способ сделать это. Похоже, что список будет продолжать расти в размерах, и я бы не хотел, чтобы этот метод был временем. Я использую Java 1.6, и я не могу использовать более новую версию Java. Спасибо за любую помощь

+3

Может быть, список не является наиболее эффективной структуры данных для использования. Не можете ли вы создать собственный класс, содержащий первый элемент отдельно, а остальные в списке? Этот класс может даже реализовать интерфейс списка, поэтому для него он будет просто списком, но внутренне он может поддерживать это ограничение. –

+0

@tobias_k. Спасибо, я изучу этот вариант. Для получения дополнительной информации Список приходит из службы, и эта служба получает его из хранилища данных Spring. Я получаю его в контроллере весны mvc. Вот когда я должен применить это ограничение перед отправкой списка в представление как атрибут модели. – alainlompo

+0

попробуйте priorityQueue вместо этого? –

ответ

1

Я думаю, что вы можете сэкономить время обработки рефакторинга кода для этого:

public void doConstrainList(List<String> liste, String constraint) { 

    System.out.println("List initial state: " + liste); 
    if (liste.remove(constraint)) { 
     liste.add(0, constraint); 
    } 

    System.out.println("List state after processing:" + liste); 
} 
+0

Спасибо, это хороший момент. – alainlompo