Вы можете использовать компаратор для сортировки элементов вашего потока.Также вы можете создать компаратор с несколькими правилами, вызвав метод firstComparator.thenComparing(secondComparator)
.Смотрите пример.Для ввода у нас есть номера: [2, 3, 4, 5, 7, 8, 9, 10]
.Для вывода у нас будет: [2, 4, 8, 10, 3, 9, 5, 7]
.Сначала мы ставим четные числа.Затем мы ставим числа, делимые на три.А потом мы ставим другие цифры.
public static void main(String[] args) {
List<Integer> sourceList = new ArrayList<>(Arrays.asList(2, 3, 4, 5, 7, 8, 9, 10));
Comparator<Integer> firstComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 % 2 == 0 && o2 % 2 == 0 || o1 % 2 != 0 && o2 % 2 != 0) {
return 0;
}
if (o1 % 2 == 0) {
return -1;
}
return 1;
}
};
Comparator<Integer> secondComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 % 3 == 0 && o2 % 3 == 0 || o1 % 3 != 0 && o2 % 3 != 0) {
return 0;
}
if (o1 % 3 == 0) {
return -1;
}
return 1;
}
};
List<Integer> sortedList = sourceList
.stream()
.sorted(firstComparator.thenComparing(secondComparator)
.collect(Collectors.toList());
System.out.println(sortedList);
}