java - 使用 Java 8 和谓词基于 Id 将三个异构列表合并为单个列表
问题描述
我想基于一个字段将三种不同类型的列表合并到一个列表中。
A(id, val1)
B(id, val2)
C(id, val3)
D(id, val1, val2, val3)
List<A> AList;
List<B> BList;
List<C> CList;
List<D> DList;
使用 Stream 和 Predicates 将 AList、BList、CList 合并到 DList。
一种方法是使用 n^2 复杂度合并第一个 AList 和 BList 以获得 DList(带有 val1 和 val2);然后循环 DList 以再次使用 n^2 用 CList 填充 val3。所以复杂性将是
n^2 + n^2 = n^2
Q1。有没有更好的方法来提高复杂性?Q2。我想使用 Predicate 和 Stream 来解决这个问题,所以使代码可读且短。
解决方案
O(n)
如果您愿意使用O(n)
额外的空间,您可以这样做。
- 从三个列表中创建三个映射 (hashmap) -
id
to映射、 toval1
映射和id
toval2
映射(通过迭代三个列表一次)。id
val3
- 循环遍历其中一张地图并构造
List<D>
. 您可以访问 中的其他val
sO(1)
。
编辑:这假设 id 对象已经equals
实现hashcode
。
推荐阅读
- wordpress - .htaccess - 由于映射域和 WP 子站点 URL 的冲突 - 使用 WPultimo 插件
- react-native - 如何获取 FlatList 中某个项目的值?
- python - RPi python 脚本无法从:/etc/rc.local、crontab、systemd 运行
- javascript - TypeError: Object.entries 不是 MERN-CLI 安装中的函数
- javascript - 在 react redux 中从 HOC 创建多个请求
- vba - WinHTTP 请求失败(超时)。为什么?
- flutter - 如何通过颤振访问手机上联系人组的名称?
- sql-server - 有没有办法使用 node.js mssql 模块将对象插入数据库
- java - String.format(%.2f,double) 仅在一半的测试中有效
- content-management-system - 在 prismic.io admin 中可视化分层内容/分类