我有一个Post类,其中包含3个属性:userId
,userName
,postId
。
每个帖子都会在数据库中生成一个唯一的id(String),所以我将其保存在HashMap中,其中Key是唯一的帖子ID,值是Post,就像这样:
HashMap<String, Post> posts = new HashMap<>();
posts.put(postId, new Post(userId, userName, postId)).
现在我想查找地图中所有带有特定userId
的帖子。该怎么做?
答案 0 :(得分:1)
您可以在Map的值中查找与提供的userId匹配的Post
:
public List<Post> search(HashMap<String, Post> posts, String userId){
return
posts.values()
.stream()
.filter(p -> p.getUserId().equals(userId))
.collect(toList());
}
答案 1 :(得分:1)
这应该可以解决问题,
posts.values().stream().filter(p -> p.userId.equals("yourUserId")).collect(Collectors.toList());
答案 2 :(得分:1)
使用HashMap的当前结构,只能通过遍历整个地图并比较每个值userId
来获取userId
的帖子。
如果您想高效地查找与特定UserId
相关的所有帖子,而无需遍历HashMap,则必须更改HashMap本身的结构,而不必依赖于由{数据库作为hashMap的键。相反,您应该使用postId
作为HashMap的键:
userId
插入:
HashMap<String, ArrayList<Post>> posts = new HashMap<>();
检索:
public void addPost(String userId, Post newPost) {
ArrayList<Post> postsForUserId = posts.get(userId);
postsForUserId.add(newPost);
}
答案 3 :(得分:1)
这可以通过更改地图结构来完成。
如果不必具有相同的Map结构,则可以出于特殊目的更改Map将解决您的问题。
//Initialization of map where key is userId and value is list of Post objects.
HashMap<String, List<Post>> postsByUserId = new HashMap<String, List<Post>>();
//Insertion of post into map.
List<Post> postList = postsByUserId.get(post.userId);
//Null check and initialization of List.
if (postList == null) {
postList = new ArrayList<Post>();
//Put list into map
postsByUserId.put(post.userId, postList);
}
//Add object to the list. Either it will be the list retrieved from map or initialized above.
postList.add(post);
//Retrieve list of post by userId
List<Post> postListOfUserId = postsByUserId.get(userId);
谢谢!