我有一个地图,其中包含用户名作为密钥和用户对象。
问题是我有一个名为John
和username = "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);
}
答案 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}
这不需要为了其他目的更新每个密钥。