Java流根据条件限制集合元素

Sha*_*shi 4 java java-8 java-stream

下面的代码采用流,对其进行排序.如果存在应该应用的最大限制,则应用它.

if(maxLimit > 0) {
    return list.stream().sorted(comparator).limit(maxLimit).collect(Collectors.toList());
} else {
    return list.stream().sorted(comparator).collect(Collectors.toList());
}

//maxLimit, list, comparator can be understood in general terms.
Run Code Online (Sandbox Code Playgroud)

这里,如果存在限制操作,则在其他内部,它不存在.流上的其他操作是相同的.

当maxLimit大于零时,有没有办法应用限制.在上面给出的代码块中,重复相同的逻辑,除了限制一个块中的操作.

Szy*_*iak 13

您可以将代码拆分为以下部分:

final Stream stream = list.stream()
        .sorted(comparator);

if (maxLimit > 0) {
    stream = stream.limit(maxLimit);
}

return stream.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不必像在初始示例中那样维护两个分支.

此外,在分配stream变量时,值得使用特定的泛型类型,例如,如果list是变量的List<String>则使用Stream<String>类型stream.


Pau*_*ris 7

list.stream().sorted(comparator).limit(maxLimit>0 ? maxLimit: list.size()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

查看当前的限制实施情况,我认为它会检查限制是否小于当前大小,因此不会像我最初预期的那样低效