Требование «использовать лямбда-выражение» довольно странно. Я могу выполнить это требование, просто заменив вызов .limit
на
.limit(((IntSupplier)() -> 8).getAsInt())
Посмотрите! Я использовал лямбда там! () -> 8
. А затем вы можете перейти к решению проблемы с concat
, как вы сказали.
Очевидно, это не то, что вы имели в виду.
Если вы хотите поместить лямбду в метод sort
, чтобы отсортировать первые 7 целых чисел, а затем всегда оставлять восьмое в конце, вы можете сделать что-то вроде этого:
Random random = new Random();
List<Integer> unsorted = random.ints(1, 64)
.distinct()
.limit(8)
.boxed()
.collect(Collectors.toList());
// here you need to get the last element that you don't want to sort
int last = unsorted.get(unsorted.size() - 1);
// here is the lambda
List<Integer> sorted = unsorted.stream().sorted((x, y) -> {
if (Integer.compare(x, y) == 0) {
return 0;
}
// if any one of the arguments is the last one...
if (last == x) {
return 1;
}
if (last == y) {
return -1;
}
return Integer.compare(x, y);
}).collect(Collectors.toList());
// you can also use "List.sort" with the same lambda
Обратите внимание, что я лично считаю этот вызов метода sorted
очень нечитаемым. Я не вижу на первый взгляд, что вы пытаетесь отсортировать все, кроме последнего. С точки зрения читабельности лучше использовать concat
.