• 【对线面试官】 Java 泛型


    public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    
    	List<T> findAll();
    
    	List<T> findAll(Sort sort);
    
    	List<T> findAllById(Iterable<ID> ids);
    
    	<S extends T> List<S> saveAll(Iterable<S> entities);
    
    	void flush();
    
    	<S extends T> S saveAndFlush(S entity);
    
    	void deleteInBatch(Iterable<T> entities);
    
    	void deleteAllInBatch();
    
    	T getOne(ID id);
    
    	@Override
    	<S extends T> List<S> findAll(Example<S> example);
    
    	@Override
    	<S extends T> List<S> findAll(Example<S> example, Sort sort);
    }
    

    // 传入 需要group by 和 sum 的字段名
    public cacheMap(List<String> groupByKeys, List<String> sumValues) {
      this.groupByKeys = groupByKeys;
      this.sumValues = sumValues;
    }
    
    private void excute(T e) {
      
      // 从pojo 取出需要group by 的字段 list
      List<Object> key = buildPrimaryKey(e);
      
      // primaryMap 是存储结果的Map
      T value = primaryMap.get(key);
      
      // 如果从存储结果找到有相应记录
      if (value != null) {
        for (String elem : sumValues) {
          // 反射获取对应的字段,做累加处理
          Field field = getDeclaredField(elem, e);
          if (field.get(e) instanceof Integer) {
            field.set(value, (Integer) field.get(e) + (Integer) field.get(value));
          } else if (field.get(e) instanceof Long) {
            field.set(value, (Long) field.get(e) + (Long) field.get(value));
          } else {
            throw new RuntimeException("类型异常,请处理异常");
          }
        }
        
        // 处理时间记录
        Field field = getDeclaredField("updated", value);
        if (null != field) {
          field.set(value, DateTimeUtils.getCurrentTime());
        }
      } else {
        // group by 字段 第一次进来
        try {
          primaryMap.put(key, Tclone(e));
          createdMap.put(key, DateTimeUtils.getCurrentTime());
        }catch (Exception ex) {
          log.info("first put value error {}" , e);
        }
      }
    }
    

    文章以纯面试的角度去讲解,所以有很多的细节是未铺垫的。

    比如说反射和泛型基础,这些在【Java3y】都有过详细的基本教程甚至电子书,我就不再详述了。

    欢迎关注我的微信公众号【面试造火箭】来聊聊Java面试

  • 相关阅读:
    Jquery基于ActiveX的批量上传
    枚举类型在as3中的实现
    delphi操作word基类,插入表格,分页符,日期,页码,替换,图片
    消除文本锯齿
    As3显示对象scrollRect滚动问题
    Bitmap序列化
    加载图片的方法
    球体旋转坐标推导
    AS3基于TextField实现图文并排更新于2015.08.05
    Flash与外部程序之间的通信
  • 原文地址:https://www.cnblogs.com/Java3y/p/14201106.html
Copyright © 2020-2023  润新知