в некоторых языках предикат действительно должен возвращать логическое значение. В javascript это не так.
Некоторые случаи, такие как 0 или ложные (могут быть другие), являются ложными, остальное - true
Сортировка коллекции 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());
Вы можете отсортировать свой список первым:
List<String> result =
items.stream()
.sorted(Comparator.comparingLong(CcaesItem:: getYear).thenComparingLong(getBcItem))
.map(c -> c.getType() + " " + c.getBcItem() + "/" + c.getYear())
.collect(toList());
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
, потому что список может содержать нулевые значения
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;
}
}