java - 如何判断一个流是否有一个或多个管道?
问题描述
我们可以说流连接使用一个流管道吗?例如这段代码
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);
解决方案
您无法分辨出这种差异。连接两个流后,您应该将结果视为一个流,与最初创建为一个流的流没有什么不同。流从何处获取其元素始终取决于实现。在您的示例中,可能很清楚,流可能从其他两个流中获取其元素,但可能存在一些远非明确的示例。
如果您真正的问题是您的流已从具有相同元素的流中连接起来,并且您想摆脱重复项,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());
现在输出没有任何重复
交流电
推荐阅读
- graphql - 在 Gatsby 和 Contentful 中按日期过滤
- amazon-cognito - AWS Cognito-删除登录页面中的注册
- indexeddb - 尝试使用 PouchDB 从 IndexedDB 获取记录时,Firefox 中出现“无法打开 indexedDB”错误
- reactjs - React - 从父组件引用子组件
- android - setContentView() 正在初始化,未调用
- ios - Xcode 错误:找不到“FirebaseCore/FirebaseCore.h”文件
- java - 覆盖全局杰克逊配置
- electron - Electron:如何在卸载时删除 ~/.config/electron-app 文件夹?
- google-photos-api - 如何使用 Google Photos API 的 baseUrl 下载原始图像或视频?
- javascript - 向后端 API 发送 post 请求时关闭表单而不重新加载页面