当值在地图中时,Map.containsValue()返回false

per*_*ck2 2 java map

我正在尝试检查地图中的值何时,但我不知道为什么containsValue()没有正确检查它.

这是我的代码:

    Map<String, String> usersMap = userAPI.getBuyersFromBUUPToRootMap(getParentBusinessUnitId());
    //usersMap's [STDOUT] {super, root (rootSuper) - [EZMRootCmp]=3008, user, buyer A (buyer1) - [EZMBuyer]=1007, user, Obsvr (observer) - [EZMBuyer]=1006, user, Root (rootTest) - [EZMRootCmp]=3001, user, Test (test) - [EZMBuyer]=1001, zabuhab, Miguel (buyerAdmin1) - [EZMBuyer]=1008}

    System.out.println(usersMap.values()); 
    //[STDOUT] [3008, 1007, 1006, 3001, 1001, 1008]

    System.out.println(usersMap.containsValue(getUserProfile().getUserId())); //[STDOUT] false
    //getUserProfile().getUserId() [STDOUT] 1008
Run Code Online (Sandbox Code Playgroud)

如您所见,getUserProfile().getUserId()其值1008在Map中,但它返回false.

你知道为什么会这样吗?我该如何解决这个问题呢?我试着添加一个Long.valueOf(getUserProfile().getUserId()); 但它一直在回归false

PS:我搜查所以在这样的问题这样,但它并没有帮助我的这种情况

下面,我的完整代码:

    UserAPI userAPI = ServiceLocator.getService(UserAPI.class);
    Map<String, String> usersMap = userAPI.getBuyersFromBUUPToRootMap(getParentBusinessUnitId());
    System.out.println(usersMap);
    System.out.println("#######################");
    System.out.println(usersMap.values());
    System.out.println("##########valor para getAuctionHeaderDO().getPrimaryContact().getId() #############");
    System.out.println(usersMap.containsValue(getAuctionHeaderDO().getPrimaryContact().getId()));
    System.out.println("##########valor para getUserProfile().getUserId()#############");
    System.out.println(getUserProfile().getUserId());
    System.out.println(usersMap.containsValue(getUserProfile().getUserId()));
Run Code Online (Sandbox Code Playgroud)

结果如下:

[STDOUT] {super, root (rootSuper) - [EZMRootCmp]=3008, user, buyer A (buyer1) - [EZMBuyer]=1007, user, Obsvr (observer) - [EZMBuyer]=1006, user, Root (rootTest) - [EZMRootCmp]=3001, user, Test (test) - [EZMBuyer]=1001, zabuhab, Miguel (buyerAdmin1) - [EZMBuyer]=1008}

[STDOUT] #######################

[STDOUT] [3008, 1007, 1006, 3001, 1001, 1008]

[STDOUT] ##########valor para getAuctionHeaderDO().getPrimaryContact().getId() #############

[STDOUT] false

[STDOUT] ##########valor para getUserProfile().getUserId()#############

[STDOUT] 1008

[STDOUT] false
Run Code Online (Sandbox Code Playgroud)

Sub*_*der 10

usersMap<String,String>是String键和String值的映射.我认为getAuctionHeaderDO().getPrimaryContact().getId()回归integerlong.Map#containsValue(Object)接受任何object值但无法找到它,因为值不可用于相同类型.


一个小的推导 -

Map<String,String> map= new HashMap<String, String>();
map.put("10", "1000");
map.put("11", "1001");
map.put("12", "1002");
map.put("13", "1003");
System.out.println(map.containsValue(1002));
Run Code Online (Sandbox Code Playgroud)

它打印false.


您应该找到值为String,然后您将能够获得所需的结果.

System.out.println(map.containsValue(String.valueOf(1002)));
Run Code Online (Sandbox Code Playgroud)

它会打印出来true.