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

时间:2017-10-11 15:30:07

标签: 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.

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

当maxLimit大于零时,是否有任何方法可以应用限制。在上面给出的代码块中,除了限制一个块中的操作外,重复相同的逻辑。

2 个答案:

答案 0 :(得分:13)

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

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

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

return stream.collect(Collectors.toList());

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

同样,在分配stream变量时,值得使用特定的泛型类型,例如:如果listList<String>,则使用Stream<String>类型作为stream变量。

答案 1 :(得分:6)

list.stream().sorted(comparator).limit(maxLimit>0 ? maxLimit: list.size()).collect(Collectors.toList())

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