Здравствуйте. У меня есть лист таких объектов.
class Obj {
Integer property1;
Object property2;
}
Мне нужно отсортировать их в стриме. Мне нужно, отсортировать по property1 в первую очередь, затем в thenComparing() добавить условие, чтобы сперва шли те обьекты, у которых property2 == null.
То есть вот сортировка по property1:
List<Obj> sortedList = list.stream()
.sorted(Comparator.comparing(Obj::property1))
.collect(Collectors.toList());
У меня не получается cделать добавочную сортировку, я вроде делаю простые вещи, но идея ругается, что non static method cannot be referenced from static context
Помогите пожалуйста с сортировкой.
Можно так.
Comparator<Obj> comparator1 = Comparator.comparing(Obj::getProperty1);
Comparator<Obj> comparator2 = comparator1.thenComparing((o1, o2) -> (o2.property2 == null) ? 1 : 0 + (o1.property2 == null ? -1 : 0));
list.stream().sorted(comparator2)...
Про ошибку non static method cannot be referenced from static context - в каком месте она возникает?
Можно так:
List<Obj> result =
List.<Obj>of(new Obj(), new Obj(), new Obj())
.stream()
.sorted(Comparator.comparing(Obj::getProperty1)
.thenComparing(
Comparator.nullsFirst(Comparator.comparing(Obj::getProperty2))))
.collect(Collectors.toList());
Сборка персонального компьютера от Artline: умный выбор для современных пользователей