<commit_before>package com.example.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.util.Log;

public class ClassUtil {

	@SuppressWarnings("rawtypes")
	public static List<HashMap<String, ?>> saveObj2List(Object object) {

		// iniClass(object.getClass());

		Class clazz = object.getClass();
		List<HashMap<String, ?>> list = new ArrayList<HashMap<String, ?>>();
		Field[] fields = clazz.getDeclaredFields();

		for (Field field : fields) {
			// 声明保存每个属性的map
			HashMap<String, Object> map = new HashMap<String, Object>();
			// 保存属性名，同时也就是表中的列名
			map.put("fieldName", field.getName());// clazz.getName()
			// 保存属性类型，用于匹配SOL语法
			String type = field.getType().toString();
			if (type.equals("int")) {// 数字型
				map.put("fieldType", "smallint");
			} else if (type.equals("long")) {
				map.put("fieldType", "integer");
			} else if (type.equals("class java.lang.String")) {// 字符型
				map.put("fieldType", "text");
			} else {// 目前处理不了的，以下待补充
				map.put("fieldType", "text");
			}
			// 保存属性值
			try {
				Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
				// Log.w("liuy", "获取方法：" + "get" +
				// getMethodName(field.getName()));
				if (field.getGenericType().toString().equals("int")) {
					// Log.e("liuy", "触发了");
					int val = (Integer) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("long")) {
					long val = (Long) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("double")) {
					double val = (Double) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("boolean")) {
					boolean val = (Boolean) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("class java.lang.String")) {
					String val = (String) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("class java.util.ArrayList")) {
					ArrayList val = (ArrayList) m.invoke(object);
					map.put("fieldValue", val);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}

			// 保存完毕，添加至属性队列
			// Log.w("liuy", "属性名：" + map.get("fieldName") + "属性类型:" +
			// map.get("fieldType") + ",属性值：" + map.get("fieldValue"));
			list.add(map);
		}
		return list;
	}

	private static String getMethodName(String fildeName) throws Exception {
		byte[] items = fildeName.getBytes();
		items[0] = (byte) ((char) items[0] - 'a' + 'A');
		return new String(items);
	}

	@SuppressWarnings("rawtypes")
	public static String getObjClassName(Object object) {
		Class clazz = object.getClass();
		return clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1);
	}

	/**
	 * 
	 * 测试方法
	 * 
	 * @param args
	 */
	@SuppressWarnings("rawtypes")
	private static void iniClass(Class clazz) {

		// 获取属性

		Map<String, Class> map = getClassFields(clazz, false);

		for (Object key : map.keySet()) {

			Log.w("liuy", "<field=" + key.toString() + "> <Type=" + map.get(key) + ">");

		}

		// 获取方法

		List<Method> methods = getMothds(clazz, false);

		for (Method method : methods) {

			Log.w("liuy", method.getName());
<commit_msg>增加数据类型处理<commit_after>package com.example.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.util.Log;

public class ClassUtil {

	@SuppressWarnings("rawtypes")
	public static List<HashMap<String, ?>> saveObj2List(Object object) {

		// iniClass(object.getClass());

		Class clazz = object.getClass();
		List<HashMap<String, ?>> list = new ArrayList<HashMap<String, ?>>();
		Field[] fields = clazz.getDeclaredFields();

		for (Field field : fields) {
			// 声明保存每个属性的map
			HashMap<String, Object> map = new HashMap<String, Object>();
			// 保存属性名，同时也就是表中的列名
			map.put("fieldName", field.getName());// clazz.getName()
			// 保存属性类型，用于匹配SOL语法
			String type = field.getType().toString();
			if (type.equals("int")) {// 数字型，短
				map.put("fieldType", "smallint");
			} else if (type.equals("long")) {// 数字型，长
				map.put("fieldType", "integer");
			} else if (type.equals("double")) {// 小数
				map.put("fieldType", "double");
			} else if (type.equals("class java.lang.String")) {// 字符型
				map.put("fieldType", "text");
			} else {// 其他类型包括ArrayList先不填类型，包括目前处理不了的
				map.put("fieldType", "");
			}
			// 保存属性值
			try {
				Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
				// Log.w("liuy", "获取方法：" + "get" +getMethodName(field.getName()));
				Log.e("liuy", field.getGenericType().toString());
				if (field.getGenericType().toString().equals("int")) {
					// Log.e("liuy", "触发了");
					int val = (Integer) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("long")) {
					long val = (Long) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("double")) {
					double val = (Double) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("boolean")) {
					boolean val = (Boolean) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().equals("class java.lang.String")) {
					String val = (String) m.invoke(object);
					map.put("fieldValue", val);
				} else if (field.getGenericType().toString().contains("java.util.ArrayList")) {
					// 如果是ArrayList，保存的时候需要处理一下
					String typeOfList = field.getGenericType().toString();
					String typeOfClass = typeOfList.substring(typeOfList.indexOf("<"), typeOfList.lastIndexOf(">") + 1);
					ArrayList val = (ArrayList) m.invoke(object);
					map.put("fieldValue", typeOfClass + val.toString());
					// Log.e("liuy", "这是啥：" + val.toString());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}

			// 保存完毕，添加至属性队列
			// Log.w("liuy", "属性名：" + map.get("fieldName") + "属性类型:" +
			// map.get("fieldType") + ",属性值：" + map.get("fieldValue"));
			list.add(map);
		}
		return list;
	}

	private static String getMethodName(String fildeName) throws Exception {
		byte[] items = fildeName.getBytes();
		items[0] = (byte) ((char) items[0] - 'a' + 'A');
		return new String(items);
	}

	@SuppressWarnings("rawtypes")
	public static String getObjClassName(Object object) {
		Class clazz = object.getClass();
		return clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1);
	}

	// -----------------------------------------------------------------------------------------------------------------------------------------------

	/**
	 * 
	 * 测试方法
	 * 
	 * @param args
	 */
	@SuppressWarnings("rawtypes")
	private static void iniClass(Class clazz) {

		// 获取属性

		Map<String, Class> map = getClassFields(clazz, false);

		for (Object key : map.keySet()) {

			Log.w("liuy", "<field=" + key.toString() + "> <Type=" + map.get(key) + ">");

		}

		// 获取方法

		List<Method> methods = getMothds(clazz, false);

		for (Method method : methods) {

			Log.w("liuy", method.getName());

{'fraction_non_alphanumeric': 0.20832760753057578, 'fraction_numerical': 0.0012367733956300674, 'mean_word_length': 3.3685474189675872, 'pattern_counts': {'":': 0, '<': 28, '<?xml version=': 0, '>': 28, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6702679', 'n_tokens_mistral': 2892, 'n_tokens_neox': 2588, 'n_words': 470}