zoukankan      html  css  js  c++  java
  • java 使用HashMap缓存对象

    需求:在代码中创建HashMap对象,存储相应对象的键——值对,在需要时,通过key,调用相应的对象,减少数据库的访问量

    实现过程:

    1、创建HashMap对象:

    private HashMap<String, MessagesParticipatorInformation> chatParticipator = new HashMap<>();

    2、给chatParticipator中添加相应的键与对象(数据库中所有的Member、shop对象,键为其对应的id):

    private void refreshChatPaticipatorMap() {
      HashMap<String, MessagesParticipatorInformation> map = new HashMap<>();
      // All Shop Information
      List<Shop> shopList = shopService.getList();
      for (int i = 0; i < shopList.size(); i++) {
      Shop shop = shopList.get(i);
      MessagesParticipatorInformation mpi = new MessagesParticipatorInformation();
      mpi.setId(shop.getId());
      mpi.setAvatar(shop.getLogo());
      mpi.setNickName(shop.getName());
      map.put(shop.getId(), mpi);
      this.chatParticipator = map;
     }
      // All Member Information
      List<Member> memberList = memberService.getList();
      for (int i = 0; i < memberList.size(); i++) {
      Member member = memberList.get(i);
      MessagesParticipatorInformation mpi2 = new MessagesParticipatorInformation();
      mpi2.setId(member.getId());
      mpi2.setAvatar(member.getAvatar());
      mpi2.setNickName(member.getNickName());
      map.put(member.getId(), mpi2);
      this.chatParticipator = map;
     }
    }

    3、创建通过id获取对象的方法:

    private MessagesParticipatorInformation getChatPaticipatorById(String ownerId) {
    MessagesParticipatorInformation msg = null;
    /**
    * Parameter check
    */
    if (ownerId != null && !ownerId.equals("")) {
    /**
    * Refresh the map, if necessary.
    */
    if (this.chatParticipator.isEmpty()) {
    refreshChatPaticipatorMap();
    }

    if (this.chatParticipator.containsKey(ownerId)) {
    /**
    * Use id to find the expected message
    */
    msg = this.chatParticipator.get(ownerId);
    // To-Do
        }
     }

    if (msg == null) {
    // Set to default values, if nothing found in the map.
    msg = new MessagesParticipatorInformation();
    String defaultAvater = "http://xiaoyouhui2018.oss-cn-beijing.aliyuncs.com/notice/cover/20190311/1552297610973875.png";
    String defaultNickName = "校友汇";

    msg.setId(ownerId);
    msg.setAvatar(defaultAvater);
    msg.setNickName(defaultNickName);
      }

    return msg;
    }

    4、创建一个接口测试效果:

    @RequestMapping(value = "v2/member/blog/uname")
    public Object getChatPaticipatorByIds(@RequestParam(value = "id") String id) {
        MessagesParticipatorInformation msg = new MessagesParticipatorInformation();
        msg = getChatPaticipatorById(id);
        return APIResult.createSuccess(msg);
    }

    5、在程序中调用getChatPaticipatorById(String ownerId)方法,获取相应的对象,如下(消息对话中,获取对方信息):

    MessagesParticipatorInformation msg = null;
    if (member.getId().equals(messages.getMessagesFrom())) {
        msg = getChatPaticipatorById(messages.getMessagesTo());
    } else {
            msg = getChatPaticipatorById(messages.getMessagesFrom());
    }

    注:该方法的使用过程中,关键是:相应的键——值对存入Map中

                                                              通过键获取HashMap中对象的方法,需求:HashMap为空、定时刷新创建HashMap的方法

                                                              在程序中获取相应的key,通过键获取HashMap中对象的方法获取对象。

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/qqzhulu/p/10533120.html
Copyright © 2011-2022 走看看