《蒼穹外賣》項目學習記錄-Day11訂單統計

根據起始時間和結束時間,先把begin放入集合中用while循環當begin不等于end的時候,讓begin加一天,這樣就把這個區間內的時間放到List集合。

查詢每天的訂單總數也就是查詢的時間段是大于當天的開始時間(0點0分0秒)小于當天的結束時間的(23點59分59秒)的。

//查詢每天的訂單總數 select count(id) from orders where order_time > ? and order_time < ?

查詢有效訂單數,不僅是當天的時間段還要狀態是已完成的訂單,status=5代表已完成。

//查詢每天的有效訂單數 select count(id) from orders where order_time > ? and order_time < ? and status = 5

/*** 統計指定時間區間內的訂單數據* @param begin* @param end* @return*/public OrderReportVO getOrderStatistics(LocalDate begin, LocalDate end) {//存放從begin到end之間的每天對應的日期List<LocalDate> dateList = new ArrayList<>();dateList.add(begin);while (!begin.equals(end)){begin = begin.plusDays(1);dateList.add(begin);}//存放每天的訂單總數List<Integer> orderCountList = new ArrayList<>();//存放每天的有效訂單數List<Integer> validOrderCountList = new ArrayList<>();//遍歷dateList集合,查詢每天的有效訂單數和訂單總數for (LocalDate date : dateList) {//查詢每天的訂單總數 select count(id) from orders where order_time > ? and order_time < ?LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);Integer orderCount = getOrderCount(beginTime, endTime,null);//查詢每天的有效訂單數 select count(id) from orders where order_time > ? and order_time < ? and status = 5Integer validOrderCount = getOrderCount(beginTime, endTime, Orders.COMPLETED);orderCountList.add(orderCount);validOrderCountList.add(validOrderCount);}//計算時間區間內的訂單總數量Integer totalOrderCount = orderCountList.stream().reduce(Integer::sum).get();//計算時間區間內的有效訂單數量Integer validOrderCount = validOrderCountList.stream().reduce(Integer::sum).get();Double orderCompletionRate = 0.0;if (totalOrderCount != 0){//計算訂單完成率orderCompletionRate = validOrderCount.doubleValue() / totalOrderCount;}return OrderReportVO.builder().dateList(StringUtils.join(dateList,",")).orderCountList(StringUtils.join(orderCountList,",")).validOrderCountList(StringUtils.join(validOrderCountList,",")).totalOrderCount(totalOrderCount).validOrderCount(validOrderCount).orderCompletionRate(orderCompletionRate).build();}private Integer getOrderCount(LocalDateTime begin,LocalDateTime end,Integer status){Map map = new HashMap();map.put("begin",begin);map.put("end",end);map.put("status",status);return orderMapper.countByMap(map);}

?·功能測試

Stream流的使用步驟

1.獲取Stream流?

·獲取集合的Stream流

Collection提供的如下方法???????? 說明

default Stream<E> stream()????? 獲取當前集合對象的Stream流

·獲取數組的Stream流

Arrays類提供的如下方法??????????? 說明

public static <T> Stream<T> stream(T[] array)? 獲取當前數組的Stream流

public static <T> Stream<T> of(T...values)???????? 獲取當前接收數據的Stream流

中間方法指的是調用完成后會返回新的Stream流,可以繼續使用(支持鏈式編程)。

終結方法指的是調用完成后,不會返回新的Stream了,沒法繼續使用流了。

2.Stream提供的常用中間方法???? 說明

Stream <T> filter(Predicate<? super T>predicate)??? 用于對流中的數據進行過濾

Stream <T> sorted()????????????????????????????????????????????????? 對元素進行升序排序

Stream <T> sorted(Comparator<? super T> comparator) 按照指定規則排序

Stream <T> limit(long maxSize)???????????????????????????????? 獲取前幾個元素

Stream <T> skip(long n)???????????????????????????????????????????? 跳過前幾個元素

Stream <T> distinct()????????????????????????????????????????????????? 去除流中重復的元素

<R>Stream<R> map(Function<? super T,?extends R> mapper)

對元素進行加工,并返回對應的新流

static <T> Stream<T> concat(Stream a,Stream b) ? ? 合并a和b兩個流為一個流

3.Stream流常見的終結方法

Stream提供的常用終結方法?????????????? 說明

void forEach(Consumer action)????????? 對此流運算后的元素執行遍歷

long count()???????????????????????????????????????? 統計此流運算后的元素個數

Optional<T> max(Comparator<? super T> comparator)

獲取此流運算后最大值元素

Optional<T> min(Comparator<? super T> comparator)

獲取此流運算后最小值元素

收集Stream流:就是把Stream流操作后的結果轉回到集合或者數組中去返回。

Stream流:方便操作集合/數組手段;集合/數組:才是開發中的目的。

Stream提供的常用終結方法??????????????? 說明

R collect(Collector collector)??????????????? 把流處理后的結果收集到一個指定的集合中去

Object toArray()?????????????????????????????????? 把流處理后的結果收集到一個數組中去

流只能收集一次

Collectors工具類提供了具體的收集方式???????????? 說明

public static <T> Collector toList()?????????????????????? 把元素收集到List集合中去

public static <T> Collector toSet()?????????????????????? 把元素收集到Set集合中去

public static Collector toMap(Function KeyMapper,Function valueMapper)

把元素收集到Map集合中

我的筆記中沒有這個Stream.reduce()方法,所以我去查了一下。

Stream.reduce()是Java 8引入的一個強大的工具,用于對流中的元素進行歸納操作。

reduce方法可以將流中的多個元素組合成一個單一的結果,通常用于求和、求乘積、查找最大值或最小值等操作。

reduce方法的基本用法

reduce(BinaryOperator<T> accumulator)

這種方法沒有初始值,流的第一個元素將作為初始值。返回的是Optional<T>,以防流為空。例如:

Optional<Integer> sum = list.stream().reduce((a,b)->a + b);

2.有初始值?:T reduce(T identity, BinaryOperator<T> accumulator)。這種方法有一個初始值identity,可以保證即使流為空也會有一個默認結果。返回的是T。例如:
int sum = list.stream().reduce(0, (a, b) -> a + b);
?3.并行流操作?:reduce(U identity, BiFunction<U, T, U> accumulator, BinaryOperator<U> combiner)。這種方法適用于并行流操作,可以通過兩個函數實現累加器和合并器的分離。例如:
int sum = list.parallelStream().reduce(0, (partialResult, element) -> partialResult + element, Integer::sum);
reduce方法的應用場景
?1.求和?:將流中的所有元素相加。例如,計算一個整數列表的總和。
?2.求乘積?:將流中的所有元素相乘。例如,計算一個整數列表的乘積。
?3.查找最大值或最小值?:通過比較操作,找到流中的最大值或最小值。
?4.連接字符串?:將流中的字符串元素連接成一個新的字符串。例如,將多個單詞連接成一個句子。
?5.自定義聚合操作?:通過自定義的累加器函數,實現更復雜的聚合操作。例如,計算兩個數的平均值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67777.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python】python油田數據分析與可視化(源碼+數據集)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【python】python油田數據分析與可視化&#xff08…

FBX SDK的使用:基礎知識

Windows環境配置 FBX SDK安裝后&#xff0c;目錄下有三個文件夾&#xff1a; include 頭文件lib 編譯的二進制庫&#xff0c;根據你項目的配置去包含相應的庫samples 官方使用案列 動態鏈接 libfbxsdk.dll, libfbxsdk.lib是動態庫&#xff0c;需要在配置屬性->C/C->預…

【單層神經網絡】基于MXNet庫簡化實現線性回歸

寫在前面 同最開始的兩篇文章 完整程序及注釋 導入使用的庫# 基本 from mxnet import autograd, nd, gluon # 模型、網絡 from mxnet.gluon import nn from mxnet import init # 學習 from mxnet.gluon import loss as gloss # 數據集 from mxnet.gluon…

【爬蟲】JS逆向解決某藥的商品價格加密

??????????歡迎來到我的博客?????????? ??作者:秋無之地 ??簡介:CSDN爬蟲、后端、大數據領域創作者。目前從事python爬蟲、后端和大數據等相關工作,主要擅長領域有:爬蟲、后端、大數據開發、數據分析等。 ??歡迎小伙伴們點贊????、收藏??、…

OpenAI開源戰略反思:中國力量推動AI產業變革

在周五的Reddit問答會上&#xff0c;OpenAI首席執行官Sam Altman罕見承認公司正面臨來自中國科技企業的強勁挑戰。這位向來強硬的硅谷領軍者坦言&#xff0c;以深度求索&#xff08;DeepSeek&#xff09;為代表的中國AI公司正在改寫行業游戲規則。 這場歷時三小時的對話揭示了…

一文講解HashMap線程安全相關問題(上)

HashMap不是線程安全的&#xff0c;主要有以下幾個問題&#xff1a; ①、多線程下擴容會死循環。JDK1.7 中的 HashMap 使用的是頭插法插入元素&#xff0c;在多線程的環境下&#xff0c;擴容的時候就有可能導致出現環形鏈表&#xff0c;造成死循環。 JDK 8 時已經修復了這個問…

android java系統彈窗的基礎模板

1、資源文件 app\src\main\res\layout下增加custom_pop_layout.xml 定義彈窗的控件資源。 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/…

python學習——常用的內置函數匯總

文章目錄 類型轉換函數數學函數常用的迭代器操作函數常用的其他內置函數 類型轉換函數 數學函數 常用的迭代器操作函數 實操&#xff1a; from cv2.gapi import descr_oflst [55, 42, 37, 2, 66, 23, 18, 99]# (1) 排序操作 asc_lst sorted(lst) # 升序 desc_lst sorted(l…

《解鎖AI黑科技:數據分類聚類與可視化》

在當今數字化時代&#xff0c;數據如潮水般涌來&#xff0c;如何從海量數據中提取有價值的信息&#xff0c;成為了眾多領域面臨的關鍵挑戰。人工智能&#xff08;AI&#xff09;技術的崛起&#xff0c;為解決這一難題提供了強大的工具。其中&#xff0c;能夠實現數據分類與聚類…

MySQL數據庫環境搭建

下載MySQL 官網&#xff1a;https://downloads.mysql.com/archives/installer/ 下載社區版就行了。 安裝流程 看b站大佬的視頻吧&#xff1a;https://www.bilibili.com/video/BV12q4y1477i/?spm_id_from333.337.search-card.all.click&vd_source37dfd298d2133f3e1f3e3c…

AI學習指南HuggingFace篇-Tokenizers 與文本處理

一、引言 在自然語言處理(NLP)中,文本數據的預處理是至關重要的一步。分詞器(Tokenizers)是將文本分割成單詞、短語或其他單元的工具,是文本處理的基礎。Hugging Face的Tokenizers庫提供了高效且靈活的分詞工具,支持多種預訓練模型的分詞需求。本文將深入講解Tokenizer…

如何用微信小程序寫春聯

? 生活沒有模板,只需心燈一盞。 如果笑能讓你釋然,那就開懷一笑;如果哭能讓你減壓,那就讓淚水流下來。如果沉默是金,那就不用解釋;如果放下能更好地前行,就別再扛著。 一、引入 Vant UI 1、通過 npm 安裝 npm i @vant/weapp -S --production?? 2、修改 app.json …

[SAP ABAP] 靜態斷點的使用

在 ABAP 編程環境中&#xff0c;靜態斷點通過關鍵字BREAK-POINT實現&#xff0c;當程序執行到這一語句時&#xff0c;會觸發調試器中斷程序的運行&#xff0c;允許開發人員檢查當前狀態并逐步跟蹤后續代碼邏輯 通常情況下&#xff0c;在代碼的關鍵位置插入靜態斷點可以幫助開發…

96,【4】 buuctf web [BJDCTF2020]EzPHP

進入靶場 查看源代碼 GFXEIM3YFZYGQ4A 一看就是編碼后的 1nD3x.php 訪問 得到源代碼 <?php // 高亮顯示當前 PHP 文件的源代碼&#xff0c;用于調試或展示代碼結構 highlight_file(__FILE__); // 關閉所有 PHP 錯誤報告&#xff0c;防止錯誤信息泄露可能的安全漏洞 erro…

基于深度學習的輸電線路缺陷檢測算法研究(論文+源碼)

輸電線路關鍵部件的缺陷檢測對于電網安全運行至關重要&#xff0c;傳統方法存在效率低、準確性不高等問題。本研究探討了利用深度學習技術進行輸電線路關鍵組件的缺陷檢測&#xff0c;目的是提升檢測的效率與準確度。選用了YOLOv8模型作為基礎&#xff0c;并通過加入CA注意力機…

3、從langchain到rag

文章目錄 本文介紹向量和向量數據庫向量向量數據庫 索引開始動手實現rag加載文檔數據并建立索引將向量存放到向量數據庫中檢索生成構成一條鏈 本文介紹 從本節開始&#xff0c;有了上一節的langchain基礎學習&#xff0c;接下來使用langchain實現一個rag應用&#xff0c;并稍微…

DeepSeek-R1大模型本地化部署

前言 Ollama作為一個輕量級、易上手的工具&#xff0c;可以幫助你在自己的電腦上快速部署和運行大型語言模型&#xff0c;無需依賴云端服務。通過加載各種開源模型&#xff0c;比如LLaMA、GPT-J等&#xff0c;并通過簡單的命令行操作進行模型推理和測試。 此小結主要介紹使用…

【小白學AI系列】NLP 核心知識點(五)Transformer介紹

Transformer Transformer 是一種基于自注意力機制&#xff08;Self-Attention Mechanism&#xff09;的深度學習模型&#xff0c;首次由 Vaswani 等人于 2017 年在論文《Attention is All You Need》中提出。與 RNN 和 LSTM 不同&#xff0c;Transformer 不需要依靠序列順序進…

【高級篇 / IPv6】(7.6) ? 03. 寬帶IPv6 - ADSL撥號寬帶上網配置 ? FortiGate 防火墻

【簡介】大部分ADSL撥號寬帶都支持IPv6&#xff0c;這里以ADSL撥號寬帶為例&#xff0c;演示在FortiGate防火墻上的配置方法。 準備工作 同上篇文章一樣&#xff0c;為了兼顧不熟悉FortiGate防火墻的朋友&#xff0c;我們從基礎操作進行演示&#xff0c;熟練的朋友可以跳過這一…

【Elasticsearch】_all 查詢

在 Elasticsearch 中&#xff0c;_all 查詢是一種特殊的查詢方式&#xff0c;用于在多個索引或數據流中執行搜索操作&#xff0c;而無需顯式指定每個目標索引或數據流的名稱。以下是關于 _all 查詢的詳細說明&#xff1a; _all 查詢概述 用途&#xff1a;_all 查詢允許您在多個…