자바 피리 칼 적 실현

3135 단어 자바 피리 칼 적

    /** 
     *        . 
     *    
     * 
     * <!-- 
     * 
     *     : 
     * ---------------------------------------------------------------------------- 
     * 2012-3-5,   ,     
     * 
     * --> 
     * 
     * @author     
     * @since $Rev$ 
     * 
     */  
    public class CrossUtils {  
       
      // ~ Static Fields  
      // ==========================================================================  
       
      // ~ Fields  
      // ==========================================================================  
       
      // ~ Constructors  
      // ==========================================================================  
       
      // ~ Methods  
      // ==========================================================================  
         
      /** 
       *         . 
       * 
       * @param crossArgs     。 
       *  <pre> 
       *    :{ 
       *          { 1, 2, 3 }, 
       *          { a, b, c, d }, 
       *          { A, B, C }, 
       *          ... 
       *    } 
       * </pre> 
       * 
       * @return          
       */  
      public static List<List<String>> cross(List<List<String>> crossArgs) {  
       
        //            
        int rows = crossArgs.size() > 0 ? 1 : 0;  
       
        for (List<String> data : crossArgs) {  
          rows *= data.size();  
        }  
       
        //           
        int[] record = new int[crossArgs.size()];  
       
        List<List<String>> results = new ArrayList<List<String>>();  
       
        //         
        for (int i = 0; i < rows; i++) {  
          List<String> row = new ArrayList<String>();  
            
          //              
          for (int index = 0; index < record.length; index++) {  
            row.add(crossArgs.get(index).get(record[index]));  
          }  
            
          results.add(row);  
          crossRecord(crossArgs, record, crossArgs.size() - 1);  
        }  
       
        return results;  
      }  
       
      /** 
       *              . 
       * 
       * @param sourceArgs             
       * @param record             
       * @param level             
       */  
      private static void crossRecord(List<List<String>> sourceArgs, int[] record, int level) {  
        record[level] = record[level] + 1;  
       
        if (record[level] >= sourceArgs.get(level).size() && level > 0) {  
          record[level] = 0;  
          crossRecord(sourceArgs, record, level - 1);  
        }  
      }  
    }  

좋은 웹페이지 즐겨찾기