根据值数据在HashMap中搜索

时间:2018-12-22 19:07:27

标签: java search hashmap

我有一个Post类,其中包含3个属性:userIduserNamepostId。 每个帖子都会在数据库中生成一个唯一的id(String),所以我将其保存在HashMap中,其中Key是唯一的帖子ID,值是Post,就像这样:

HashMap<String, Post> posts = new HashMap<>(); posts.put(postId, new Post(userId, userName, postId)).

现在我想查找地图中所有带有特定userId的帖子。该怎么做?

4 个答案:

答案 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);

谢谢!