@Override
    public void handle(Future<?> future, Object context) {
      @SuppressWarnings("unchecked")
      Future<Result<byte[]>> afuture = (Future<Result<byte[]>>) future;
      UserActiveDetail.Builder mergeValueBuilder = Recommend.UserActiveDetail.newBuilder();

      UserActiveDetail oldValueHeap = null;
      try {
        Result<byte[]> res = afuture.get();
        if (res.isSuccess() && res.getResult() != null) {
          oldValueHeap = Recommend.UserActiveDetail.parseFrom(res.getResult());
        }
      } catch (Exception e) {
        logger.error(e.getMessage(), e);
      }

      if (debug) {
        if (oldValueHeap == null) {
          logger.info("get key=" + key + ",from tde ,but null");
        } else {
          logger.info("get key=" + key + ",from tde success");
        }
      }
      mergeToHeap(values, oldValueHeap, mergeValueBuilder);
      Save(mergeValueBuilder);
    }
 private void printOut(Recommend.UserActiveDetail mergeValue) {
   for (UserActiveDetail.TimeSegment tsegs : mergeValue.getTsegsList()) {
     logger.info("--id=" + tsegs.getTimeId());
     for (UserActiveDetail.TimeSegment.ItemInfo item : tsegs.getItemsList()) {
       logger.info("-------item=" + item.getItem());
       for (UserActiveDetail.TimeSegment.ItemInfo.ActType act : item.getActsList()) {
         logger.info(
             "-----------act="
                 + act.getActType()
                 + ",count="
                 + act.getCount()
                 + ",time="
                 + act.getLastUpdateTime());
       }
     }
   }
 }