成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文教你如何通過 Stream API 批量 Mock 數據

開發 前端
工作中 mock? 數據在很多場景都會遇到,但是可能很多時候我們都不會太關注 mock? 的數據的形式,雖然說一個循環也可以 mock 到相應的數據,但是能寫的優雅一點為什么我們不寫的優雅一點呢?

在日常開發的過程中我們經常會遇到需要 mock? 一些數據的場景,比如說 mock? 一些接口的返回或者說 mock? 一些測試消息用于隊列生產者發送消息,可能很多時候我們都是使用一些固定的 case? 或者一條相同的數據重復使用。今天阿粉就教大家用 Stream 去構造一些偽真實的一些數據。

Mock 任意個 UUID

首先我們通過普通寫法來構造 100 個 UUID,代碼如下相信大家都會寫,就不多說了。

public static List<UUID> listUUID(int size) {
List<UUID> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
UUID uuid = UUID.randomUUID();
list.add(uuid);
}
return list;
}

下面再提供 Stream 的寫法,代碼如下,一行搞定

public static List<UUID> listUUID2(int size) {
return Stream.generate(UUID::randomUUID).limit(size).collect(Collectors.toList());
}

這里我們使用了 Stream? 的 generate? 方法,該方法接收一個 Supplier? 類型的參數,Supplier? 是一個功能接口,只有一個 get? 方法,返回一個對象,不接收任何參數,上面我們就是通過 UUID? 靜態引用的方式獲得一個 UUID? 對象,另外我們使用 limit 方法來進行截斷只獲取 100 個。

Mock 消息

接下來我們再使用 Stream API 批量構造一批消息,作為隊列的生產者進行數據發送

定義消息體

package com.example.demo.dto;

/**
* <br>
* <b>Function:</b><br>
* <b>Author:</b>@author Java 極客技術<br>
* <b>Date:</b>2022-09-03 11:49<br>
* <b>Desc:</b>無<br>
*/
public class Message {
int id;
String message;

public Message(int id, String message) {
this.id = id;
this.message = message;
}

@Override
public String toString() {
return "Message{" +
"id=" + id +
", message='" + message + '\'' +
'}';
}
}

測試代碼

public static void main(String[] args) {
List<Message> messages = genMessage(10);
messages.forEach(System.out::println);
}

public static List<Message> genMessage(int size) {
AtomicInteger atomicInteger = new AtomicInteger();
Supplier<Message> supplier = () -> {
Message message = new Message(new Random().nextInt(), "Message : " + atomicInteger.getAndIncrement());
System.out.println("inner:" + message.toString());
return message;
};
System.out.println(99);
return Stream.generate(supplier).limit(size).collect(Collectors.toList());
}

圖片

先看下運行結果,我們再來分析,可以看到第一個 case? 我們是使用靜態引用來返回一個 UUID? 對象,這個 case? 我們通過創建 lambda? 表達式的形式來實現一個 Supplier?,在表達式中我們進行 message? 對象的構造,然后進行返回。其實上文的靜態引用,本質上也是一個 lambda,所以跟下面的實現是一個原理,只不過是一些語法糖而已。

public static List<UUID> listUUID2(int size) {
Supplier<UUID> supplier = () -> UUID.randomUUID();
return Stream.generate(supplier).limit(size).collect(Collectors.toList());
}

如果對 Stream? 流有理解的可以看到,我們這里有兩個點需要注意,一個是我們這里的輸出 99 是在 inner? 之前的,另一個是我們這里使用的 limit 方法,不然會一直進行輸出不會停止的,這兩點其實都是流的基本特性,就不多說了。

Supplier 是個啥

上文提到 Stream?  的 generate? 方法接收的是一個 Supplier? 類型的參數,那么這個 Supplier  是個啥呢?我們來仔細看一下。

package java.util.function;

@FunctionalInterface
public interface Supplier<T> {

/**
* Gets a result.
*
* @return a result
*/
T get();
}

通過代碼我們可以看到首先 Supplier? 是個接口,既然是接口那就可以進行具體的實現,并且這個接口只有一個方法 get? 返回指定的類型,同時該接口還有一個 @FunctionalInterface 注解,表名這個接口是一個函數是編程的接口,函數式接口是指僅僅只包含一個抽象方法的接口。

圖片

我們看到這個注解的 javadoc? 里面大概的意思是這個注解是用來標識一個函數接口,函數式接口只有一個抽象方法,但是如果有 default? 方法或者覆蓋了 Object? 的 public? 方法都不算是抽象方法。還有一句講的是函數式接口可以通過 lambda? 表達式,方法引用或者構造方法引用來創建。我們上面的兩個例子演示了 lambda 表達式和方法引用,構造函數其實也一樣。

所以總結來說  Stream?  的 generate? 方法通過接收一個 Supplier?  類型的參數來創建一個數據流,得到數據流以后就可以進行各種流的操作了。我們這篇文章更多的是通過 Stream? 來構造 mock? 數據,創建一個流,對于流的各種操作就不在本文的討論范圍之內了,阿粉之前也有相應的文章介紹過 Stream 感興趣的小伙伴可以去翻翻看。

總結

工作中 mock? 數據在很多場景都會遇到,但是可能很多時候我們都不會太關注 mock? 的數據的形式,雖然說一個循環也可以 mock 到相應的數據,但是能寫的優雅一點為什么我們不寫的優雅一點呢?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2019-07-23 07:30:16

2021-12-07 06:02:15

Redis Docker運維

2024-12-19 15:00:00

數據清洗Python

2024-11-18 17:16:18

Python性能優化編程

2024-11-20 16:12:31

Python圖像處理計算機視覺

2022-02-20 09:56:28

TCPIP網絡協議

2023-12-27 07:40:43

HTTP服務器負載均衡

2024-11-20 16:42:03

Python科學計算

2023-07-31 21:56:54

哨兵系統redis

2021-01-15 13:18:39

數據模型領域模型代碼

2020-12-22 10:02:53

ZabbixMySQL數據庫

2025-05-30 01:00:00

RAG大模型流程

2023-05-11 08:26:56

2021-08-10 05:49:10

網絡協議C語言Linux操作

2025-06-20 08:00:00

硬路由軟路由網絡

2020-03-23 10:06:05

工具代碼開發

2023-09-15 12:00:01

API應用程序接口

2021-01-27 09:34:51

Visual C++Dev C++codelite

2021-03-22 16:03:57

鴻蒙HarmonyOS應用開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品久久 | 国产精品美女www | 亚洲一区二区在线 | 国产精品视频一 | 午夜看片网站 | 9porny九色视频自拍 | 日韩手机在线视频 | 99久久久久 | 91精品国产色综合久久 | 精品国产精品一区二区夜夜嗨 | wwwxxx日本在线观看 | 九九热在线精品视频 | 日韩一二三区视频 | 91欧美| 三级在线免费观看 | 日韩中文一区二区三区 | 一区二区三区在线 | 欧 | 视频一区在线 | 羞羞视频一区二区 | 欧美一级二级三级视频 | 成人永久免费 | 国产日韩一区二区三免费 | 精品中文字幕一区二区 | 精品国产乱码久久久久久闺蜜 | 97精品国产一区二区三区 | 日本精品视频在线 | 美女爽到呻吟久久久久 | 91成人在线视频 | av一二三四| 色在线免费 | 久久久久综合 | 日韩国产欧美一区 | 男人天堂免费在线 | 亚洲国产成人精品女人久久久 | 欧美性猛片aaaaaaa做受 | 国产综合精品一区二区三区 | 精品国产乱码久久久久久丨区2区 | 国外成人免费视频 | 久久精品国产一区二区电影 | 久久亚洲一区 | 亚洲精品国产成人 |