2016-05-17 2 views
0

У меня есть ArrayList со значениями ... ST1000, ST 5000, ST 30000, ST400, ST500, SP1000, SP600Как отсортировать список строки на основе пользовательской логики в Java

Я хочу это о быть отсортированы как ST1000, ST2000, ST3000, ST4000, SP600, SP1000 .. Как я могу это сделать?

Благодаря

+0

какие ценности? Какие-то объекты? Не могли бы вы написать код, который вы написали? –

+0

@OlimpiuPOP - Нет, это просто строковые значения! – AngryJS

+0

У моего кода пока нет какой-либо сортировки, если бы это были объекты, я думал об использовании компаратора, но его просто строковые значения :( – AngryJS

ответ

0

вы можете использовать compareTo, который будет сравнить его для вас лексически

здесь 2 способа сортировки списка с помощью Java 8

list.stream() 
    .sorted((s1, s2) -> s1.compareTo(s2)).collect(Collectors.toList()); 

list.sort((s1, s2)->s1.compareTo(s2)); 

с помощью Java 8, вы не» t необходимо использовать метод Collections.sort

0

Вы можете сортировать любую коллекцию по желанию с помощью Collections.sort(List<T> list, Comparator<? super T> c) метод.

Все, что вам нужно сделать, это реализовать способ Comparator'scompare.

В вашем конкретном случае это бы что-то вроде этого:

List<String> list = Arrays.asList("ST1000", "ST5000", "ST30000", "ST400", "ST500", "SP1000", "SP600"); 
Collections.sort(list, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     String o1Prefix = o1.substring(0, 2); 
     String o2Prefix = o2.substring(0, 2); 
     if (o1Prefix.equals(o2Prefix)) { 
      return Integer.parseInt(o1.substring(2, o1.length())) > Integer.parseInt(o2.substring(2, o2.length())) ? 1 : -1; 
     } else if (o1Prefix.equals("ST")) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 
}); 
0

Вы можете создать пользовательский объект компаратор и переопределить метод сравнения с требуемой логикой.

Comparator<Model> customComparator = new Comparator<Model>() { 

     public int compare(Model arg0, Model arg1) { 
      //TODO custom sort logic 
     } 

     }; 

если сравнивать возвращает -1, то arg0 меньше arg1, 0 равных и 1 больше

затем отсортировать список с помощью пользовательского компаратор

  Collections.sort(list, customComparator); 
Смежные вопросы