日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

改造BeanUtils,優(yōu)雅實(shí)現(xiàn)List數(shù)據(jù)拷貝

來(lái)源: 責(zé)編: 時(shí)間:2024-06-12 17:31:02 228觀看
導(dǎo)讀BeanUtils.copyProperties();確實(shí)為我們做了很多事情,雖然不能完美完成深拷貝,但是對(duì)于 po、vo、dto 的拷貝已經(jīng)足夠用了。可還是有一些不夠完美的地方。不足幾點(diǎn)如下:①. 不能拷貝 list,而拷貝 list 的情況又大量存在,因

BeanUtils.copyProperties();確實(shí)為我們做了很多事情,雖然不能完美完成深拷貝,但是對(duì)于 po、vo、dto 的拷貝已經(jīng)足夠用了。可還是有一些不夠完美的地方。ACe28資訊網(wǎng)——每日最新資訊28at.com

不足幾點(diǎn)如下:ACe28資訊網(wǎng)——每日最新資訊28at.com

①. 不能拷貝 list,而拷貝 list 的情況又大量存在,因此會(huì)有許多重復(fù)代碼。ACe28資訊網(wǎng)——每日最新資訊28at.com

for (S source : sources) {    T target = new T();    copyProperties(source, target);    list.add(target);}

②. 有一些簡(jiǎn)單的查詢(xún),僅僅需要轉(zhuǎn)換一下 vo 也需要 new Vo()。ACe28資訊網(wǎng)——每日最新資訊28at.com

public Vo findById(Integer id) { Vo vo = new Vo(); Po po = dao.findById(id); copyProperties(po, vo); return vo;}

③. 這種拷貝方式是沒(méi)有返回值的,jdk8 支持 stream() 操作之后,支持不是很友好,不方便 lambda 表達(dá)式的使用,因此我們決定通過(guò)集成 BeanUtils 類(lèi),自己造一個(gè)方便用的輪子。ACe28資訊網(wǎng)——每日最新資訊28at.com

使用

我們將新創(chuàng)建一個(gè)輪子 BeanConvertUtils,使用如下,當(dāng)我們要轉(zhuǎn)換 po、vo 時(shí),只需要:ACe28資訊網(wǎng)——每日最新資訊28at.com

// 使用前public Vo findById(Integer id) { Vo vo = new Vo(); Po po = dao.findById(id); copyProperties(po, vo); return vo;}// 使用后public Vo findById(Integer id) { return BeanConvertUtils.converTo(dao.findById(id), Vo::new);}// 使用后,通過(guò)lambda表達(dá)式特殊處理個(gè)別字段public Vo findById(Integer id) { return BeanConvertUtils.converTo(dao.findById(id), Vo::new,   (s, t) -> t.setName(s.getName)) );}

當(dāng)我們要拷貝 list 的時(shí)候也很簡(jiǎn)單:ACe28資訊網(wǎng)——每日最新資訊28at.com

// 使用前public List<Vo> findAll() { List<Vo> vos = new ArrayList(); List<Po> pos = dao.findAll(); for (Po po : Pos) {     Vo vo = new Vo();     BeanUtis.copyProperties(po, vo);     vos.add(vo);    } return vos;}// 使用后public List<Vo> findAll() { return BeanConvertUtils.converToList(dao.findAll(), Vo::new)}// 同樣支持自定義lambdapublic List<Vo> findAll() { return BeanConvertUtils.converToList(dao.findAll(), Vo::new,  (s, t) -> t.setName(s.getName)) )}

代碼如下:ACe28資訊網(wǎng)——每日最新資訊28at.com

/** * 轉(zhuǎn)換對(duì)象工具 * */public class BeanConvertUtils extends BeanUtils {    public static <S, T> T convertTo(S source, Supplier<T> targetSupplier) {        return convertTo(source, targetSupplier, null);    }    /**     * 轉(zhuǎn)換對(duì)象     *     * @param source         源對(duì)象     * @param targetSupplier 目標(biāo)對(duì)象供應(yīng)方     * @param callBack       回調(diào)方法     * @param <S>            源對(duì)象類(lèi)型     * @param <T>            目標(biāo)對(duì)象類(lèi)型     * @return 目標(biāo)對(duì)象     */    public static <S, T> T convertTo(S source, Supplier<T> targetSupplier, ConvertCallBack<S, T> callBack) {        if (null == source || null == targetSupplier) {            return null;        }        T target = targetSupplier.get();        copyProperties(source, target);        if (callBack != null) {            callBack.callBack(source, target);        }        return target;    }    public static <S, T> List<T> convertListTo(List<S> sources, Supplier<T> targetSupplier) {        return convertListTo(sources, targetSupplier, null);    }    /**     * 轉(zhuǎn)換對(duì)象     *     * @param sources        源對(duì)象list     * @param targetSupplier 目標(biāo)對(duì)象供應(yīng)方     * @param callBack       回調(diào)方法     * @param <S>            源對(duì)象類(lèi)型     * @param <T>            目標(biāo)對(duì)象類(lèi)型     * @return 目標(biāo)對(duì)象list     */    public static <S, T> List<T> convertListTo(List<S> sources, Supplier<T> targetSupplier, ConvertCallBack<S, T> callBack) {        if (null == sources || null == targetSupplier) {            return null;        }        List<T> list = new ArrayList<>(sources.size());        for (S source : sources) {            T target = targetSupplier.get();            copyProperties(source, target);            if (callBack != null) {                callBack.callBack(source, target);            }            list.add(target);        }        return list;    }    /**     * 回調(diào)接口     *     * @param <S> 源對(duì)象類(lèi)型     * @param <T> 目標(biāo)對(duì)象類(lèi)型     */    @FunctionalInterface    public interface ConvertCallBack<S, T> {        void callBack(S t, T s);    }}

性能

由于只是 BeanUtils 的一個(gè)封裝,跟原來(lái)的代碼性能幾乎差不多,如果要說(shuō)差一點(diǎn)也沒(méi)錯(cuò),畢竟多了一層函數(shù)堆棧的調(diào)用,但是基本可以忽略不計(jì)。主要的性能還是由 BeanUtils 決定。ACe28資訊網(wǎng)——每日最新資訊28at.com

提醒

不知道大家對(duì)這個(gè) BeanConvertUtils 工具類(lèi)感覺(jué)怎么樣,自己在項(xiàng)目中倒是大量使用,也很方便。ACe28資訊網(wǎng)——每日最新資訊28at.com

但是有兩點(diǎn)要提醒:ACe28資訊網(wǎng)——每日最新資訊28at.com

  • 此方法依舊不能解決深層次的深拷貝問(wèn)題,詳細(xì)的可以 google 一下 BeanUtils 的深拷貝問(wèn)題。
  • 如果 source 或者 targetSupplier 只要有一個(gè)為 null,本工具類(lèi)不像 BeanUtils 一樣拋出異常,而是返回 null,因?yàn)楣P者認(rèn)為調(diào)用方如果把 null 進(jìn)行準(zhǔn)換,那就是想轉(zhuǎn)換為 null,為不為空應(yīng)該由調(diào)用方自己負(fù)責(zé)。

本文鏈接:http://m.www897cc.com/showinfo-26-93363-0.html改造BeanUtils,優(yōu)雅實(shí)現(xiàn)List數(shù)據(jù)拷貝

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 什么是測(cè)試自動(dòng)化?意義、方法、方法論、工具和收益

下一篇: 我們一起聊聊JavaScript判斷數(shù)據(jù)為對(duì)象

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來(lái)預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請(qǐng)期待。”同時(shí)
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫(kù),還使用這些庫(kù)實(shí)現(xiàn)了一個(gè)流處理程序
  • 2023年,我眼中的字節(jié)跳動(dòng)

    此時(shí)此刻(2023年7月),字節(jié)跳動(dòng)從未上市,也從未公布過(guò)任何官方的上市計(jì)劃;但是這并不妨礙它成為中國(guó)最受關(guān)注的互聯(lián)網(wǎng)公司之一。從2016-17年的抖音強(qiáng)勢(shì)崛起,到2018年的&ldquo;頭騰
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚(yú)拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁(yè)&ldquo;充值中心&rdquo;入口上線(xiàn)了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 騰訊蓋樓,字節(jié)拆墻

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗(yàn)嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開(kāi)發(fā)者大會(huì)2023(HDC.Together)大會(huì)上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來(lái),HarmonyOS一直以用戶(hù)為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • 華為HarmonyOS 4升級(jí)計(jì)劃公布:首批34款機(jī)型今日開(kāi)啟公測(cè)

    8月4日消息,今天下午華為正式發(fā)布了HarmonyOS 4系統(tǒng),在更流暢的前提下,還帶來(lái)了不少新功能,UI設(shè)計(jì)也有變化,會(huì)讓手機(jī)煥然一新。華為宣布,首批機(jī)型將會(huì)在
  • 朋友圈可以修改可見(jiàn)范圍了 蘋(píng)果用戶(hù)可率先體驗(yàn)

    近日,iOS用戶(hù)迎來(lái)微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項(xiàng)實(shí)用功能。在新版微信中,朋友圈終于可以修改可見(jiàn)范圍,簡(jiǎn)單來(lái)說(shuō)就是已發(fā)布的朋友圈
  • 蘋(píng)果MacBook Pro 2021測(cè)試:仍不支持平滑滾動(dòng)

    據(jù)10月30日9to5 Mac 消息報(bào)道,蘋(píng)果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯(cuò)的評(píng)價(jià),亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲校园激情| 国产日本欧美一区二区三区在线| 久久大逼视频| 久久久亚洲成人| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲视频一区二区在线观看| 亚洲欧美日韩国产成人| 久久人人97超碰人人澡爱香蕉| 欧美成人午夜激情在线| 欧美三区视频| 国产一区二区在线观看免费播放| 亚洲第一天堂无码专区| 一区二区三区免费观看| 性欧美1819性猛交| 欧美成年人网站| 国产精品日韩欧美一区| 亚洲高清成人| 亚洲综合色在线| 欧美成人午夜视频| 国产麻豆一精品一av一免费| 亚洲国产一区二区视频| 午夜视频在线观看一区| 欧美激情一区二区三区成人 | 亚洲国产天堂久久国产91| 亚洲视频你懂的| 久久米奇亚洲| 国产精品久久久久一区二区| 欲色影视综合吧| 亚洲午夜免费视频| 欧美成人综合| 国产一区二区三区日韩| 一区二区三区四区国产| 久久综合久久久久88| 国产精品色午夜在线观看| 亚洲人成欧美中文字幕| 久久久精品国产免大香伊| 国产精品久久久久久超碰| 亚洲精品欧美日韩专区| 久久久久9999亚洲精品| 国产精品乱码人人做人人爱| 亚洲人成网站色ww在线| 久久免费99精品久久久久久| 国产美女精品视频| 亚洲视频在线观看免费| 欧美激情精品久久久久久大尺度| 好吊日精品视频| 欧美夜福利tv在线| 国产精品久久久久91| 日韩亚洲欧美成人一区| 欧美插天视频在线播放| 黄色一区二区在线| 欧美一区二区三区免费在线看| 欧美丝袜一区二区三区| 亚洲美女网站| 欧美成人自拍| 亚洲韩国精品一区| 久久影音先锋| 激情文学一区| 久久精品综合网| 国产午夜精品全部视频在线播放 | 一本色道久久加勒比88综合| 欧美电影在线免费观看网站| 一区视频在线播放| 久久久久国色av免费观看性色| 国产精品综合色区在线观看| 亚洲一区二区三区久久| 欧美日韩小视频| 99国产麻豆精品| 欧美日韩成人综合天天影院| 91久久精品久久国产性色也91| 老司机精品福利视频| 伊人久久亚洲热| 久久亚洲精品一区二区| 精品动漫3d一区二区三区免费版| 久久精品国产久精国产爱| 国产一区二区日韩精品| 久久精品99国产精品| 国产一区二区三区电影在线观看 | 久久精品国产一区二区电影| 国产日韩欧美综合| 欧美专区日韩专区| 国内精品久久久久国产盗摄免费观看完整版 | 亚洲九九九在线观看| 欧美精品www在线观看| 亚洲美女91| 欧美视频一区二区三区| 亚洲网在线观看| 国产精品欧美日韩| 欧美在线观看一二区| 激情成人av| 欧美a级片网| 日韩手机在线导航| 国产精品av久久久久久麻豆网| 亚洲综合好骚| 国产专区综合网| 另类天堂视频在线观看| 亚洲人成人一区二区三区| 欧美日韩国产二区| 亚洲午夜羞羞片| 国产无一区二区| 美女日韩欧美| 99精品视频网| 国产精品一区2区| 久久精视频免费在线久久完整在线看| 精品成人a区在线观看| 欧美成人午夜剧场免费观看| 一本色道婷婷久久欧美| 国产精品爽爽爽| 久久婷婷国产综合精品青草| 亚洲精品国产精品国自产在线 | 亚洲国产婷婷综合在线精品 | 国产精品一卡二卡| 久久精品视频在线| 亚洲欧洲日产国产网站| 国产精品二区三区四区| 欧美在线一级va免费观看| 亚洲成人在线免费| 欧美视频日韩| 久久久久九九九九| 一本一道久久综合狠狠老精东影业 | 另类图片国产| 一本高清dvd不卡在线观看| 国产欧美一区二区精品仙草咪| 美女脱光内衣内裤视频久久影院| 99国产精品久久久久久久| 国产拍揄自揄精品视频麻豆| 暖暖成人免费视频| 亚洲男女自偷自拍图片另类| 揄拍成人国产精品视频| 欧美视频一区二区三区四区| 久久久久久久成人| 一区二区三区精品国产| 国户精品久久久久久久久久久不卡 | 亚洲在线观看| 在线成人激情视频| 国产精品进线69影院| 久久嫩草精品久久久精品| 一区二区三区波多野结衣在线观看| 国产亚洲精品一区二555| 欧美日韩视频在线| 久久久亚洲高清| 一区二区三区色| 亚洲成色最大综合在线| 国产精品亚洲综合一区在线观看 | 亚洲视频一区二区在线观看| 精品成人免费| 国产精品久久久久久久久免费樱桃 | 一区二区三区视频在线| 在线日韩欧美| 国产欧美在线| 欧美日韩一区三区四区| 久久中文久久字幕| 午夜精品久久久久99热蜜桃导演| 亚洲精品乱码久久久久久按摩观 | 一区二区三区日韩| 亚洲韩国日本中文字幕| 国产一区二区三区网站| 欧美色欧美亚洲另类七区| 美女精品在线| 久久精品国产亚洲一区二区| 亚洲欧美电影院| 99成人精品| 亚洲激情影视| 狠狠色狠狠色综合人人| 国产精品羞羞答答xxdd| 欧美日韩亚洲高清一区二区| 免费影视亚洲| 久久另类ts人妖一区二区| 欧美一区二区三区四区在线观看地址 | 亚洲免费黄色| 亚洲电影视频在线| 狠狠爱综合网| 国产午夜精品麻豆| 国产精品美腿一区在线看| 欧美日韩日日骚| 欧美精品久久一区| 女同性一区二区三区人了人一| 久久精品1区| 欧美伊人精品成人久久综合97 | 欧美日韩国产a| 欧美v亚洲v综合ⅴ国产v| 久久在线播放| 久久精品一本久久99精品| 午夜精品成人在线视频| 亚洲图片欧美日产| 亚洲一二三区视频在线观看| 一本色道久久综合狠狠躁篇的优点| 亚洲精品日韩在线| 亚洲精品久久久久久久久久久久| 亚洲国产高清视频| 亚洲福利视频一区| 亚洲国产综合视频在线观看| 亚洲激情国产| 亚洲日本aⅴ片在线观看香蕉| 在线国产亚洲欧美| **网站欧美大片在线观看| 影音先锋亚洲精品| 尤物精品在线| 91久久嫩草影院一区二区| 亚洲欧洲另类国产综合| 亚洲欧洲在线看| 亚洲毛片av| 亚洲一区二区三区视频| 亚洲欧美日本精品|