map,list,set常用的方法

1. 数组和list的转换

String[] str = new String[] { "you", "wu" };

List list = Arrays.asList(str);

List list = new ArrayList(2);

list.add("guan");

list.add("bao");


String[] array = new String[list.size()]; 
array = list.toArray(array);

2.定义静态的 array list map

public final static List<String> list= Lists.newArrayList("720", "741", "990");

public final static String[] array= { "1", "2", "3", "4" };

public final static Map<String, String> map= new HashMap<String, String>() {
		private static final long serialVersionUID = 1L;
		{
			put("1", "张三");
			put("2", "李四"); 
		}
	};

3.map的遍历

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

           System.out.println("map的key值是=====》"+key);

           System.out.println("map的value值是====》"+map.get(key));

 }

//map.values
Map<String, List<User>> map = Maps.Hashmap();
for (List<User> user : map.values()) {
    List<User> item = user;
}

4.将list 分割为n条数据为一组的list

List<User> userList = Lists.ArratList();

List<List<User>> lists= Lists.partition(userList, 1000);

//partition 方法使用于  分批量插入数据    防止大量数据执行不成功问题
for (List<User> user : lists) {		
    userDao.batchInsert(user );
}

2.将list倒序输出

list.add("A");
list.add("B");
list.add("C"); 
Collections.reverse(list);
System.out.println(list);              输出结果是: C  B  A

3.List去重复,保留原始顺序

    public List toNoRepeatList(List list){

        Set set = new ArrayList();

        for(Object object : list){

            if(set.add(object)){

                newList.add(object);

            }

        }

    }

4.将list转换成,分割的字符串

    List list = new ArrayList();

    list.add("1"); list.add("2"); list.add("3");

    String.join(",",list);                 //list中的值输出结果是  1.2.3

5.all elements are null问题的处理

    法一:移除null元素   list.remove(null);

    法一:修改sql,返回一定不可能为空的主键

6.set的遍历

    只能使用增强for循环,不能使用 下标取值

7.将List<User> 中按user对象某个字段排序

参考文档:java 根据对象的某个字段(boolean)对集合进行排序_z1193851270的博客-CSDN博客_根据boolean排序

                  java的list集合如何根据对象中的某个字段排序? - 小甜瓜安东泥 - 博客园

//比较list中对象的boolean类型排序

    public List<PageDate>   sortDataList(List<PageData> dataList){

 Collections.sort(categoryList, new Comparator<DG_ComponentCategory>() {
            @Override
            public int compare(PageData o1, PageData o2) {
            //得到要比较的两个对象的某个字段,这里是checked  是 boolean类型的
                boolean object1= Boolean.parseBoolean(o1.getString("checked"));
                boolean object2= Boolean.parseBoolean(o2.getString("checked"));
                //两个值进行位运算,值不同为1,为true,参与运算
                //值相同为0,为false,不参与运算
                if (o1^ o2) {
                    return onLine1 ? -1 : 1;
                } else {
                    return 0;
                }
            }
        });

    }

8.List<Map>转LIst<bean>

	/**
	 * 将一个map组成的list转成实体类bean组成的list
	 *
	 * @param mapList
	 *            存了map对象的list
	 * @param clazz
	 *            需要将这些map转成哪个实体类对象
	 * @return
	 */
	public <T> List<T> convertMapListToBeanList(List<Map<String, Object>> mapList, Class<T> clazz) {
		JSONArray jsonArray = new JSONArray();
		jsonArray.addAll(mapList);
		List<T> listBean = jsonArray.toJavaList(clazz);
		return listBean;
	}

9.对象序列化和反序列化

public class GsonUtils {

	public static Map<String, Object> parseMap(String json) {
		GsonJsonParser gjp = new GsonJsonParser();
		return gjp.parseMap(json);
	}

	public static String convetToString(Object o) {
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		String json = gson.toJson(o);
		return json;
	}

	public static <T> T convetToBean(String json, Class<T> c) {
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		return gson.fromJson(json, c);
	}

}

如:	StockanalysisResultDTO result = GsonUtils.convetToBean(resultApi, StockanalysisResultDTO.class);

9.通过属性名称反射获取到对应的值

public class ObjReflectAttr {

	/**
	 * 通过 属性名 反射获取到 value
	 *
	 * @param obj      反射对象
	 * @param attrName 属性名/数据库 字段名(属性名、字段名规范)
	 * @return 结果
	 * @throws Exception e
	 */
	public static String getVauleByAttr(Object obj, String attrName) throws Exception {
		PropertyDescriptor p = new PropertyDescriptor(StringUtil.a_bToaB(StringUtil.a_bToaB(attrName)), obj.getClass());
		Method readMethod = p.getReadMethod();
		String result = readMethod.invoke(obj) + StringUtils.EMPTY;
		return "null".equals(result) ? null : result;
	}
}
如:user.setValue(ObjReflectAttr.getVauleByAttr(user, name));

10bean的深度复制

public class DeepCloneUtil {

	public static Object deepClone(Object target) throws Exception {
		// 将对象写到流里
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		oo.writeObject(target);
		oo.close();
		// 从流里读出来
		ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
		ObjectInputStream oi = new ObjectInputStream(bi);
		Object readObject = oi.readObject();
		oi.close();
		return readObject;
	}

	private static final KryoPool KRYO_POOL = newKryoPool();

	private static KryoPool newKryoPool() {
		return new KryoPool.Builder(() -> {
			final Kryo kryo = new Kryo();
			// 提前注册会提速
			kryo.register(List.class);
			kryo.register(Collection.class);
			kryo.register(String.class);
			kryo.register(Map.class);
			kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(
					new SerializingInstantiatorStrategy()));
			return kryo;
		}).softReferences().build();
	}

	/**
	 * kryo 深度复制
	 * @param object
	 * @return
	 * @param <T>
	 */
	public static  <T> T deepCopy(T object) {
		Kryo kryo = KRYO_POOL.borrow();
		T copy = kryo.copy(object);
		KRYO_POOL.release(kryo);
		return copy;
	}

}

如:User user= (User) DeepCloneUtil.deepClone(userList.get(i));

11.map 转bean  参看文档:java工具类-bean转map_pgmanor的博客-CSDN博客_bean转map

	/**
	 * 将map集合中的数据转化为指定对象的同名属性中
	 */
	public static <T> T mapToBean(Map<String, Object> map,Class<T> clazz) throws Exception {
		//通过无参构造方法实例化
		T bean = clazz.newInstance();
		//实体类通过BeanMap转化成Bean
		BeanMap beanMap = BeanMap.create(bean);
		beanMap.putAll(map);
		return bean;
	}

 public static <T> Map<String, ?> beanToMap(T bean) {
        BeanMap beanMap = BeanMap.create(bean);
        Map<String, Object> map = new HashMap<>();

        beanMap.forEach((key, value) -> {
            map.put(String.valueOf(key), value);
        });
        return map;
    }

    public static <T> T mapToBean(Map<String, ?> map, Class<T> clazz)
            throws IllegalAccessException, InstantiationException {
        T bean = clazz.newInstance();
        BeanMap beanMap = BeanMap.create(bean);
        beanMap.putAll(map);
        return bean;
    }

    public static <T> List<Map<String, ?>> objectsToMaps(List<T> objList) {
        List<Map<String, ?>> list = new ArrayList<>();
        if (objList != null && objList.size() > 0) {
            Map<String, ?> map = null;
            T bean = null;
            for (int i = 0, size = objList.size(); i < size; i++) {
                bean = objList.get(i);
                map = beanToMap(bean);
                list.add(map);
            }
        }
        return list;
    }

    public static <T> List<T> mapsToObjects(List<Map<String, ?>> maps, Class<T> clazz)
            throws InstantiationException, IllegalAccessException {
        List<T> list = new ArrayList<>();
        if (maps != null && maps.size() > 0) {
            Map<String, ?> map = null;
            for (int i = 0, size = maps.size(); i < size; i++) {
                map = maps.get(i);
                T bean = mapToBean(map, clazz);
                list.add(bean);
            }
        }
        return list;
    } 


12.


  // 将对象中的属性 存在map集合中
  // ignoreObjAttributes  不需要转换的属性
  // valueNullInsert  是否为空
	public static HashMap<String, Object> convertObjToMap(Object obj, List<String> ignoreObjAttributes, Boolean valueNullInsert) {
		HashMap<String, Object> map = new HashMap<>();
		if (obj == null) {
			return null;
		}
		Field[] fields = obj.getClass().getDeclaredFields();
		try {
			for (Field item : fields) {
				try {
					//打开私有访问
					item.setAccessible(true);
					//获取属性
					String name = item.getName();
					//获取属性值
					Object value = item.get(obj);
					if (!ignoreObjAttributes.contains(name) && (value != null || valueNullInsert)) {
						map.put(name, value);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return map;
	}


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值