首页 > 解决方案 > 如何判断一个流是否有一个或多个管道?

问题描述

我们可以说流连接使用一个流管道吗?例如这段代码

Stream.concat(
    l.stream()
        .filter(x -> x.getCompanyState().startsWith("D"))
        .sorted(Comparator.comparing(Company::getCompanyState)),
    l.stream()
        .filter(x -> !x.getCompanyState().startsWith("D"))
).forEach(System.out::println);

标签: javajava-stream

解决方案


您无法分辨出这种差异。连接两个流后,您应该将结果视为一个流,与最初创建为一个流的流没有什么不同。流从何处获取其元素始终取决于实现。在您的示例中,可能很清楚,流可能从其他两个流中获取其元素,但可能存在一些远非明确的示例。

如果您真正的问题是您的流已从具有相同元素的流中连接起来,并且您想摆脱重复项,distinct()则可以这样做。考虑例如:

    List<String> strings = List.of("C", "A");
    Stream<String> concatenated = Stream.concat(
            strings.stream().sorted(),
            strings.stream());
    String joined = concatenated.collect(Collectors.joining());
    System.out.println(joined);

输出有重复:

ACCA

解决方案:将调用插入distinct()到您的管道中:

    String joined = concatenated.distinct().collect(Collectors.joining());

现在输出没有任何重复

交流电


推荐阅读