zoukankan      html  css  js  c++  java
  • 【对线面试官】 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面试

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/Java3y/p/14201106.html
Copyright © 2011-2022 走看看