java 两个list基本相同的,可以复制 copy 不用遍历?

本文介绍如何使用FastJSON库在Java中快速复制和转换List集合中的对象属性,提供了一个实用的ObjectConversion工具类,用于从List<A>到List<B>的属性复制,同时探讨了在属性转换过程中可能遇到的遍历需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中,有两个list,list和list,AB对象的属性略有不同,现在想把A中的属性复制到B中,我们可以通过fastJOSN的方式方便的实现。

然后,如果再要处理个性的字段的话,那还是得遍历的。 目前好像没有找到不遍历的办法。

不过这种快速的转换copy方式,对于字段多的对象的话,还是少写一段代码? 

呵呵,也许是自我安慰。除非完全不用修改新list的属性的value。

不过fastJOSN的方式底层是否也遍历了一次呢? 这个目前没有实验,不得而知。

 

 

package com.hanshow.wise.base.operate.util;

import java.util.List;

import com.alibaba.fastjson.JSON;

/**
 * 两个对象或集合同名属性赋值

 */
public class ObjectConversion {
	
	/**
	 * 从List<A> copy到List<B>
	 * @param list List<B>
	 * @param clazz B
	 * @return List<B>
	 */
	public static <T> List<T> copy(List<?> list,Class<T> clazz){
		String oldOb = JSON.toJSONString(list);
		return JSON.parseArray(oldOb, clazz);
	}
	
	/**
	 * 从对象A copy到 对象B
	 * @param ob A
	 * @param clazz B.class
	 * @return B
	 */
	public static <T> T copy(Object ob,Class<T> clazz){
		String oldOb = JSON.toJSONString(ob);
		return JSON.parseObject(oldOb, clazz);
	}
}

用的时候可以参考这样:

String oldOb = JSON.toJSONString(notifyAnnouncesList);
            List<NotifyrNoread> notifyNoReadList = JSON.parseArray(oldOb, NotifyrNoread.class);

//这里还是特么的必须得遍历去设置个性的字段。
            for (NotifyrNoread item : notifyNoReadList) {
                item.setReceiveUserid(userId);
                item.setCreateTime(new Date());
                item.setHasRead(0);
            }

 

确定不想循环,也可以用java8的特性  steam来进行操作新的List,比如可以改成这样去写(至于底层是不是还是循环?这个模目前不得而知):

            String oldOb = JSON.toJSONString(notifyAnnouncesList);
            List<NotifyrNoread> notifyNoReadList = JSON.parseArray(oldOb, NotifyrNoread.class);

            //使用steam对List进行批量操作,表面上看起来不是遍历。
            notifyNoReadList = notifyNoReadList.parallelStream().map(item->{
                item.setReceiveUserid(userId);
                item.setCreateTime(new Date());
                item.setHasRead(0);
                return item;
            }).collect(Collectors.toList());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值