Как сортировать подстроку в коллекции?

в некоторых языках предикат действительно должен возвращать логическое значение. В javascript это не так.

Некоторые случаи, такие как 0 или ложные (могут быть другие), являются ложными, остальное - true

1
задан Mark Rotteveel 13 July 2018 в 09:40
поделиться

4 ответа

Сортировка коллекции items до создания пользовательских Strings.

List<String> spzn = items.stream()
  .sorted(Comparator.comparing(CcaesItem::getYear).thenComparing(CcaesItem::getBcItem))
  .map(vec -> vec.getType() + " " + vec.getBcItem() + "/" + vec.getYear())
  .collect(Collectors.toList());
1
ответ дан Karol Dowbecki 17 August 2018 в 13:17
поделиться

Вы можете отсортировать свой список первым:

List<String> result = 
     items.stream()
     .sorted(Comparator.comparingLong(CcaesItem:: getYear).thenComparingLong(getBcItem))
     .map(c -> c.getType() + " " + c.getBcItem() + "/" + c.getYear())
     .collect(toList());
0
ответ дан Mạnh Quyết Nguyễn 17 August 2018 в 13:17
поделиться

Collections.sort может получить экземпляр Comparator в качестве второго аргумента. В Comparator вы можете поместить любой код для сравнения двух элементов списка.

Например, сортировка spzn производится с помощью year и getBcItem:

    Collections.sort(spzn, new Comparator() {
        @Override
        public int compare(CcaesItem  o1, CcaesItem  o2) {
            if (o1.getYear() > o2.getYear()) {
                return 1;
            } else if (o1.getYear() < o2.getYear()) {
                return -1;
            } else {
                if (o1.getBcItem() > o2.getBcItem()) {
                    return 1;
                } else if (o1.getBcItem() < o2.getBcItem()) {
                    return -1;
                }
            }

            return 0;
        }
    });

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

2
ответ дан Vlad Bochenin 17 August 2018 в 13:17
поделиться
  • 1
    Определение компаратора может быть упрощено с помощью java.util.Comparator.comparing(CcaesItem::getYear).thenComparing(CcaesItem::getDcItem); – Vladimir Vagaytsev 13 July 2018 в 09:42

Это пример ученика с номером рулона, именем и адресом. Первый - без данных сортировки, а второй - с данными сортировки числа рулонов.

ArrayList<Student> ar = new ArrayList<Student>();
ar.add(new Student(111, "bbbb", "london"));
ar.add(new Student(131, "aaaa", "nyc"));
ar.add(new Student(121, "cccc", "jaipur"));

System.out.println("Unsorted");
for (int i=0; i<ar.size(); i++)
    System.out.println(ar.get(i));

Collections.sort(ar, new Sortbyroll());

System.out.println("\nSorted by rollno");
for (int i=0; i<ar.size(); i++)
    System.out.println(ar.get(i));

class Sortbyroll implements Comparator<Student>
{
    // Used for sorting in ascending order of
    // roll number
    public int compare(Student a, Student b)
    {
        return a.rollno - b.rollno;
    }
}
0
ответ дан yunandtidus 17 August 2018 в 13:17
поделиться
  • 1
    Без каких-либо дополнительных объяснений это выглядит как несвязанный свалка кода с первого взгляда. Пожалуйста, объясните подробно , что происходит. – L.Spillner 13 July 2018 в 09:25
  • 2
    это пример ученика с номером рулона, именем и адресом. первый - без данных сортировки, а второй - с данными сортировки числа рулонов. – Dhara Jani 13 July 2018 в 09:28
  • 3
    Пожалуйста, поместите подробное объяснение в свой ответ, а не в раздел комментариев. – StarShine 13 July 2018 в 10:07
Другие вопросы по тегам:

Похожие вопросы: