【发布时间】:2021-12-30 09:13:42
【问题描述】:
我正在尝试比较 HashMap 中元素的所有组合(即没有重复比较),并返回满足 HashMap 的所有元素的列表
比较函数,使用 Java 8 Streams-API。
即我想要这样的东西:
// pseudo code, this isnt hashmaps work but hopefully it gets the point across
for(int i=0; i<myHashMap.entrySet().length, i++)
for(int j=i+1, j<myHashMap.entrySet().length) {
if(myComparison(entrySet.get(i), entrySet.get(j)))
myList.add(new myClass[] {entrySet.get(i), entrySet.get(j)})
}
但使用流 API。我有一个几乎可以使用.forEach 并简单地迭代流两次的版本,但是这存在运行重复比较的问题,从而将这些重复项再次添加到列表中。我相当确定 reduce 操作员能够做到我
需要,但我完全不熟悉 Streams API,无法弄清楚如何达到预期的结果。
【问题讨论】:
-
如果我正确理解了这个问题,您可以从地图中构建一个集合以删除重复项,然后从集合中构建一个列表。
-
@Alex 不,重复项是因为与
[a, b, c]一起比较了a, b和b, a,这可能会产生相同的结果比较它们。在命令式版本中避免了这种情况,因为j从i+1开始,因此它只遍历其余元素,但是.forEach总是遍历所有元素。一组不只是修复它,OP 比较所有独特的对。
标签: java data-structures collections functional-programming java-stream