// Path: leotask/src/core/org/leores/util/able/Processable2.java
// public interface Processable2<R, A, B> {
// 	public R process(A a, B b);
// 
// 	public static class TrimStringField implements Processable2<Boolean, Object, Field> {
// 
// 		public Boolean process(Object obj, Field field) {
// 			boolean rtn = false;
// 			if (field != null && U.bAssignable(String.class, field.getType())) {
// 				String sValue = (String) U.getFieldValue(obj, field);
// 				if (sValue != null) {
// 					String sValue2 = sValue.trim();
// 					if (sValue2.length() < sValue.length()) {
// 						rtn = true;
// 					}
// 					U.setFieldValue(obj, field, sValue2);
// 				}
// 			}
// 			return rtn;
// 		}
// 
// 	}
// 
// 	public static class SampleListByIndexB<B> implements Processable2<Boolean, Integer, B> {
// 		public Integer step;
// 
// 		/**
// 		 * The sample results will with these index: 0, 0+step, 0+2*step, ...
// 		 * 
// 		 * @param step
// 		 */
// 		public SampleListByIndexB(Integer step) {
// 			this.step = step;
// 		}
// 
// 		public Boolean process(Integer i, B b) {
// 			return i % step == 0;
// 		}
// 
// 	}
// 
// 	public static class SampleListByIndex<B> implements Processable2<B, Integer, B> {
// 		public Integer step;
// 
// 		/**
// 		 * The sample results will with these index: 0, 0+step, 0+2*step, ...
// 		 * 
// 		 * @param step
// 		 */
// 		public SampleListByIndex(Integer step) {
// 			this.step = step;
// 		}
// 
// 		public B process(Integer i, B b) {
// 			B rtn = null;
// 			if (i % step == 0) {
// 				rtn = b;
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class RemoveRowWithInvalidNumber<B> implements Processable2<B[], Integer, B[]> {
// 		public String sInvalid;
// 
// 		/**
// 		 * E.g. "$%$<0" : remove rows with negative number.
// 		 * 
// 		 * @param sInvalid
// 		 */
// 		public RemoveRowWithInvalidNumber(String sInvalid) {
// 			this.sInvalid = sInvalid;
// 		}
// 
// 		public B[] process(Integer a, B[] b) {
// 			B[] rtn = b;
// 			for (int i = 0; i < b.length; i++) {
// 				Double d = U.toDouble(b[i] + "");
// 				if (d != null) {
// 					if (U.evalCheck(sInvalid, d)) {
// 						rtn = null;
// 						break;
// 					}
// 				}
// 			}
// 			return rtn;
// 		}
// 	};
// 
// }


import java.util.ArrayList;
import java.util.List;
import org.leores.util.able.Processable2;

		if (list != null && list.size() > 0) {
			B[] b0 = list.get(0);
			if (b0 != null) {
				rtn = new DataTable(info, b0.length);
				if (rtn.addAll(bAddUnEqualSizedList, pa2Element, list)) {
					add(rtn);
				} else {
					rtn = null;
				}
			}
		}
		return rtn;
	}

	public <R, B> DataTable addNewDataTable(String info, Processable2<R, Integer, B> pa2Element, List<B>... lists) {
		return addNewDataTable(info, false, pa2Element, lists);
	}

	public <B> DataTable addNewDataTable(String info, List<B>... lists) {
		return addNewDataTable(info, false, null, lists);
	}

	public <R> DataTable addNewDataTable(String info, Processable2<R, Integer, Double> pa2Element, double[]... arrays) {
		return addNewDataTable(info, false, pa2Element, arrays);
	}

	public DataTable addNewDataTable(String info, double[]... arrays) {
		return addNewDataTable(info, false, null, arrays);
	}


// Path: leotask/src/core/org/leores/util/able/Processable2.java
// public interface Processable2<R, A, B> {
// 	public R process(A a, B b);
// 
// 	public static class TrimStringField implements Processable2<Boolean, Object, Field> {
// 
// 		public Boolean process(Object obj, Field field) {
// 			boolean rtn = false;
// 			if (field != null && U.bAssignable(String.class, field.getType())) {
// 				String sValue = (String) U.getFieldValue(obj, field);
// 				if (sValue != null) {
// 					String sValue2 = sValue.trim();
// 					if (sValue2.length() < sValue.length()) {
// 						rtn = true;
// 					}
// 					U.setFieldValue(obj, field, sValue2);
// 				}
// 			}
// 			return rtn;
// 		}
// 
// 	}
// 
// 	public static class SampleListByIndexB<B> implements Processable2<Boolean, Integer, B> {
// 		public Integer step;
// 
// 		/**
// 		 * The sample results will with these index: 0, 0+step, 0+2*step, ...
// 		 * 
// 		 * @param step
// 		 */
// 		public SampleListByIndexB(Integer step) {
// 			this.step = step;
// 		}
// 
// 		public Boolean process(Integer i, B b) {
// 			return i % step == 0;
// 		}
// 
// 	}
// 
// 	public static class SampleListByIndex<B> implements Processable2<B, Integer, B> {
// 		public Integer step;
// 
// 		/**
// 		 * The sample results will with these index: 0, 0+step, 0+2*step, ...
// 		 * 
// 		 * @param step
// 		 */
// 		public SampleListByIndex(Integer step) {
// 			this.step = step;
// 		}
// 
// 		public B process(Integer i, B b) {
// 			B rtn = null;
// 			if (i % step == 0) {
// 				rtn = b;
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class RemoveRowWithInvalidNumber<B> implements Processable2<B[], Integer, B[]> {
// 		public String sInvalid;
// 
// 		/**
// 		 * E.g. "$%$<0" : remove rows with negative number.
// 		 * 
// 		 * @param sInvalid
// 		 */
// 		public RemoveRowWithInvalidNumber(String sInvalid) {
// 			this.sInvalid = sInvalid;
// 		}
// 
// 		public B[] process(Integer a, B[] b) {
// 			B[] rtn = b;
// 			for (int i = 0; i < b.length; i++) {
// 				Double d = U.toDouble(b[i] + "");
// 				if (d != null) {
// 					if (U.evalCheck(sInvalid, d)) {
// 						rtn = null;
// 						break;
// 					}
// 				}
// 			}
// 			return rtn;
// 		}
// 	};
// 
// }


// Path: leotask/src/core/org/leores/util/data/DataTableSet.java
import java.util.ArrayList;
import java.util.List;
import org.leores.util.able.Processable2;

		if (list != null && list.size() > 0) {
			B[] b0 = list.get(0);
			if (b0 != null) {
				rtn = new DataTable(info, b0.length);
				if (rtn.addAll(bAddUnEqualSizedList, pa2Element, list)) {
					add(rtn);
				} else {
					rtn = null;
				}
			}
		}
		return rtn;
	}

	public <R, B> DataTable addNewDataTable(String info, Processable2<R, Integer, B> pa2Element, List<B>... lists) {
		return addNewDataTable(info, false, pa2Element, lists);
	}

	public <B> DataTable addNewDataTable(String info, List<B>... lists) {
		return addNewDataTable(info, false, null, lists);
	}

	public <R> DataTable addNewDataTable(String info, Processable2<R, Integer, Double> pa2Element, double[]... arrays) {
		return addNewDataTable(info, false, pa2Element, arrays);
	}

	public DataTable addNewDataTable(String info, double[]... arrays) {
		return addNewDataTable(info, false, null, arrays);
	}


	public <R, B> DataTable addNewDataTable(String info, Processable2<R, Integer, B[]> pa2Element, List<B[]> list) {
