国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式、Java8新特性實戰(zhàn) - List<T> 抽象統(tǒng)計組件

這篇具有很好參考價值的文章主要介紹了設(shè)計模式、Java8新特性實戰(zhàn) - List<T> 抽象統(tǒng)計組件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、背景

在日常寫代碼的過程中,針對List集合,統(tǒng)計里面的某個屬性,是經(jīng)常的事情,針對List的某個屬性的統(tǒng)計,我們目前大部分時候的代碼都是這樣寫,每統(tǒng)計一個變量,就要定義一個值,且要在for循環(huán)增加一行累計的代碼,比較繁瑣,而且代碼寫出來不夠優(yōu)雅。

	    Double chineseSum = 0d;
        //班級積分
        Double classScore = 0d;
        //定義變量
//        .....
        for(Student student : students){
            //統(tǒng)計語文成績
            chineseSum += student.getChinese();
            //統(tǒng)計班級成績
            classScore += student.getClassScore();
            //統(tǒng)計.....
        }

二、解決思路

利用頂層抽象的思維,既然要做統(tǒng)計,可以抽象出幾個點

  • 統(tǒng)計的屬性是什么?
  • 如何統(tǒng)計?
  • 統(tǒng)計之后的結(jié)果放到哪里?

基于這三個維度的最終核心思想:給定任意的集合,你告訴我要統(tǒng)計哪些屬性,如何統(tǒng)計,我把結(jié)果統(tǒng)計好放到你設(shè)定的對象里面。這樣有點像Spring的控制反轉(zhuǎn),調(diào)用方只要告訴我規(guī)則就好了,統(tǒng)計的執(zhí)行過程由統(tǒng)計組件進行幫你統(tǒng)計。調(diào)用方只需要調(diào)用過后拿結(jié)果就行了。

三、實現(xiàn)方案

基于上面所說的思想,再結(jié)合Java 1.8的函數(shù)式編程以及泛型和設(shè)計模式,實現(xiàn)了List集合的屬性統(tǒng)計組件

核心實現(xiàn)類圖

設(shè)計模式、Java8新特性實戰(zhàn) - List<T> 抽象統(tǒng)計組件,設(shè)計模式

四、關(guān)鍵代碼展示

通過構(gòu)建統(tǒng)計上下文進行統(tǒng)計,通過函數(shù)式編程的方法指定統(tǒng)計屬性、統(tǒng)計規(guī)則、統(tǒng)計結(jié)果放到哪里

/**
     * 統(tǒng)計年齡、統(tǒng)計分數(shù)
     * @author chenfoxin
     * @date: 2022/9/1 17:40
     * @return AbstractConsolidationMode
     * @param statResult
     */
    public static StatContext<StatResult> buildStatStudentContext(StatResult statResult){
        return new StatContext<>(
                statResult,
                //統(tǒng)計年齡
                new StatAttribute<>(Student::getAge, new IntegerStatRule(), StatResult::setAge),
                //統(tǒng)計分數(shù)
                new StatAttribute<>(Student::getClassScore, new DoubleStatRule(NumberConstants.INT_TWO), StatResult::setScore),
                //統(tǒng)計數(shù)學(xué)+語文成績(組合字段)
                new StatAttribute<>((Function<Student, Double>) student -> DoubleUtils.add(NumberConstants.INT_TWO,
                        student.getChinese(),student.getMath()), new DoubleStatRule(NumberConstants.INT_TWO),
                        StatResult::setMathChinese));

    }
        List<Student> students = new ArrayList<>();
        Student stu1 = new Student(11,98D,95D,87D);
        Student stu2 = new Student(12,97D,56D,78D);
        //構(gòu)建list
        students.add(stu1);
        students.add(stu2);
        //創(chuàng)建全局對象
        StatResult statResult = new StatResult();
        //構(gòu)建統(tǒng)計上下文
        StatContext<StatResult> context = StatManager.buildStatStudentContext(statResult);
        //進行統(tǒng)計
        StatManager.execute(students,context);
        //輸出結(jié)果
        log.info("統(tǒng)計結(jié)果:" + statResult);

感興趣的朋友可以到我的博客上把源碼拉取下來看看

基于JAVA 1.8函數(shù)式編程 泛型 設(shè)計模式抽象的通用 List統(tǒng)計組件: 設(shè)計模式、Java8新特性實戰(zhàn) - List<T> 抽象統(tǒng)計組件文章來源地址http://www.zghlxwxcb.cn/news/detail-625038.html

到了這里,關(guān)于設(shè)計模式、Java8新特性實戰(zhàn) - List<T> 抽象統(tǒng)計組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 手寫Java設(shè)計模式之抽象工廠模式,附源碼解讀

    手寫Java設(shè)計模式之抽象工廠模式,附源碼解讀

    接上篇,抽象工廠模式將汽車的一些屬性可以抽象出來,可以理解為給不同汽車品牌生成時加上不同的特性,如顏色等,具體代碼如下: 引入顏色接口: 將顏色與汽車生成品牌抽象出來,增加抽象類: 繼承抽象類,分別對不同屬性的特征進行操作,如涂上顏色等,首先實現(xiàn)

    2024年04月25日
    瀏覽(23)
  • Java入坑之抽象類、設(shè)計模式與接口

    Java入坑之抽象類、設(shè)計模式與接口

    目錄 一、抽象類 1.1定義 1.2特點 1.3使用場景 1.4抽象方法 1.5抽象類的實現(xiàn) 1.6開-閉原則 1.7匿名類 二、設(shè)計模式(了解) 2.1定義 2.2分類 2.3模板設(shè)計模式 2.4單例模式 三、接口 3.1定義 3.2語法格式 3.3接口實現(xiàn) 3.4接口類型變量 3.5接口封裝 3.6默認方法(Default Methods) 3.7靜態(tài)方法(

    2023年04月15日
    瀏覽(20)
  • 【java設(shè)計模式】創(chuàng)建型模式介紹(工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式)

    簡介 本文介紹Java設(shè)計模式中創(chuàng)建型模式的五種 一、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 工廠模式提供了一種將對象的實例化過程封裝在工廠類中的方式。通過使用工

    2024年02月16日
    瀏覽(24)
  • [設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    [設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    前言: 為什么之前寫過Golang 版的設(shè)計模式,還在重新寫 Java 版? 答:因為對于我而言,當然也希望對正在學(xué)習(xí)的大伙有幫助。Java作為一門純面向?qū)ο蟮恼Z言,更適合用于學(xué)習(xí)設(shè)計模式。 為什么類圖要附上uml 因為很多人學(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那

    2024年01月22日
    瀏覽(22)
  • Java特性之設(shè)計模式【策略模式】

    Java特性之設(shè)計模式【策略模式】

    概述 在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設(shè)計模式屬于行為型模式 在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執(zhí)行算法 主要解決 :在有多種

    2024年02月08日
    瀏覽(32)
  • Java特性之設(shè)計模式【建造者模式】

    Java特性之設(shè)計模式【建造者模式】

    概述 建造者模式(Builder Pattern)使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式 一個 Builder 類會一步一步構(gòu)造最終的對象。該 Builder 類是獨立于其他對象的 主要解決 :主要解決在軟件系統(tǒng)中,有

    2024年02月07日
    瀏覽(18)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細節(jié),初窺模板設(shè)計模式、工廠設(shè)計模式與代理設(shè)計模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細節(jié),初窺模板設(shè)計模式、工廠設(shè)計模式與代理設(shè)計模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見設(shè)計模式; 抽象類是代碼開發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當于在語法程度上對子類進行了嚴格的定義限制,代碼的開發(fā)也就更加標準。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(25)
  • JAVA8-lambda表達式8:在設(shè)計模式-模板方法中的應(yīng)用

    JAVA8-lambda表達式1:什么是lambda表達式 JAVA8-lambda表達式2:常用的集合類api JAVA8-lambda表達式3:并行流,提升效率的利器? JAVA8-lambda表達式4:Optional用法 java8-lambda表達式5:toMap引發(fā)的線上故障 JAVA8-lambda表達式6:重構(gòu)和定制收集器 JAVA8-lambda表達式7:重要的函數(shù)接口 最近在公司

    2024年02月14日
    瀏覽(26)
  • Java8新特性 | List多字段排序(含示例代碼)

    可以利用 List 的 sort 方法進行排序, Comparator.comparing 可以指定排序字段, thenComparing 可以繼續(xù)指定其他的排序字段。 默認使用正序排列,如果想倒序可以使用 Comparator.reverseOrder() 指定。 下面是示例代碼 : 創(chuàng)建一個內(nèi)部類 SortTest 添加 main 方法,聲明一個List,并往其中添加數(shù)

    2024年02月12日
    瀏覽(23)
  • 設(shè)計模式-抽象工廠模式

    抽象工廠模式:該模式是對工廠模式的拓展,因為工廠模式中創(chuàng)建的產(chǎn)品都需要繼承自同一個父類或接口,創(chuàng)建的產(chǎn)品類型相同,無法創(chuàng)建其他類型產(chǎn)品,所以抽象工廠模式對其進行拓展,使其可以創(chuàng)建其他類型的產(chǎn)品。 手機產(chǎn)品 Pad產(chǎn)品 工廠 優(yōu)點:創(chuàng)建的產(chǎn)品種類不單一

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包