gpt4 book ai didi

java - 使用retainAll()查找 HashMap 之间的交集

转载 作者:行者123 更新时间:2023-12-01 09:48:50 25 4
gpt4 key购买 nike

我需要找到两个 HashMap 之间的交集,其中值是一个字符串数组,看起来retainAll()通过地址比较数组,有什么方法可以让retainAll()按照我预期的方式工作吗?

String[] aa={"aa"};
String[] bb={"aa"};
Map<String, String[]> requestParameters=new HashMap<String, String[]>();
requestParameters.put("A",aa);
Map<String, String[]> redirectParameters=new HashMap<String, String[]>();
redirectParameters.put("A",bb);

Map<String, String[]> intersectionMap = new HashMap<>(requestParameters);
intersectionMap.entrySet().retainAll(redirectParameters.entrySet());
System.out.println(""+ intersectionMap.entrySet());

最佳答案

retainAll() 方法使用对象的 equals() 方法来比较对象,对于数组,该方法会比较它们的身份。入口对象只是调用 its equals method 中键和值的 equal 方法因此只调用数组 equal 方法,这并不像人们预期的那样工作。有多种方法可以解决此问题:

一种方法是使用 Guanva's filter如 andersoj 回答 here 中所述。

另一种方法是为字符串数组创建一个包装器类,该类覆盖此包装器的 equals 方法,以逐个元素比较两个数组。 answer by Ralph 中也对此进行了描述。与之前相同的问题。

如果你想绕过包装器,你也可以使用列表,如 their equals method已按您的预期实现。如果两个列表包含相同顺序的相同元素,它将返回 true。

关于java - 使用retainAll()查找 HashMap 之间的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com