3 回答
TA贡献1816条经验 获得超4个赞
你可以试试这个:
Map<Integer, Map<Integer, Long>> mmap = linkTable.stream()
.collect(groupingBy(DonorsToPatientPair::getDonorID,
groupingBy(DonorsToPatientPair::getPatientID, counting())));
变量 mmap 现在包含一个键映射到该键到频率的值映射。如果你想得到(d, p)的出现次数,你可以这样得到:
long freq = mmap.get(d).get(p)
为了处理地图,您可以使用如下代码:
for (int donor : mmap.keySet()) {
Map<Integer, Long> patientMap = mmap.get(donor);
if (patientMap.size() < 2) {
continue; // no duplicates
}
// *** your code here ***
}
对于您自己的代码,您在循环中拥有捐赠者和从患者到其频率的地图。剩下的工作应该很容易完成。
TA贡献1827条经验 获得超4个赞
您可以使用 x 值作为排序条件对数组进行排序。然后将数组切成具有相同 x 值的较小数组对。然后,您使用当前的算法仅在较小的块中本地查找重复项。虽然这仍然有嵌套循环,但它会执行得更快,因为搜索仅限于小数组,当 n 是元素数时,具有两个嵌套循环的搜索的复杂度为 O(n*n)。
添加回答
举报