删除键敏感

时间:2018-05-03 10:59:28

标签: java

我有一个地图,其中包含用户名作为密钥和用户对象。

问题是我有一个名为Johnusername = "john"的用户名密钥,因此无法获得用户。

如何从地图中删除关键的发送密钥?

List<User> usersList = User.getUsers();
Map<String,User> users = usersList.stream()
    .collect(Collectors.toMap(User::getUsername, Function.identity()));

//check the online users
for(String username : activeUsers.getUsers()) {
    User user = users.get(username);
}

2 个答案:

答案 0 :(得分:0)

只需将所有内容转换为相同的案例:

List<User> usersList = User.getUsers();
Map<String,User> users = usersList.stream()
    .collect(Collectors.toMap(
        user -> user.getUsername().toUppercase(), // uppercase everything in the map
        Function.identity()
    )
);

//check the online users
for(String username : activeUsers.getUsers()) {
    User user = users.get(username.toUppercase()); //uppercase the username in the comparison
}

它确实提出了一个问题,即如何(和为什么)两个相同的&#34;在不同情况下,系统中存在用户名。 应该是你应该解决的问题,否则你最终会在你的代码库中散布这种大写转换。

另请参阅org.apache.commons.collections4.map.CaseInsensitiveMap,它对您完全相同:

  

在将密钥添加到地图或与其他现有密钥进行比较之前,   它们被转换为全部小写

答案 1 :(得分:0)

您可以使用Collection.removeIf

根据条件重复EntrySet并删除
Map<String, String> map = new HashMap<>();
map.put("Foo", "0");
map.put("Bar", "1");
map.put("foo", "2");

map.entrySet().removeIf(e -> e.getKey().equalsIgnoreCase("foo"));

System.out.println(map);
  

{标尺= 1}

这不需要为了其他目的更新每个密钥。