Java排序列表,然后使用Stream api从列表中获取子列表

Wiv*_*rge 2 java java-8 java-stream

public class Result {
  ...
  private Integer averageRating;
}
Run Code Online (Sandbox Code Playgroud)

我有一个结果列表List<Result>。我想对它们进行排序averageRating,然后想要将特定索引形成为特定索引,例如 10 到 20。

我可以使用Collection.sort()using Comparator.comparing()then take sublist from list来做到这一点。但问题是更高的索引可能大于列表大小,这就是我必须手动处理的原因。像 10 到 20,但列表大小为 15,则将输出 5 个项目。

但是我如何使用 Java Stream API 做到这一点?

我尝试了一些但没有奏效:

List<Result> result = list.stream().sorted(e -> e.getAverageRating()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Ili*_*hko 5

请尝试以下操作:

int from = 10;
int to = 20;

List<Result> result = list.stream()
    .sorted(Comparator.comparing(Result::getAverageRating))
    .skip(from)
    .limit(to - from)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

它应该跳过排序流的前 10 个元素,然后取不超过指定范围的差值。

  • `.limit(higherIndex-lowerIndex)` (2认同)