標簽語句分析

return userList.stream().filter(user -> {String tagsStr = user.getTags();

使用 Stream API 來過濾 userList 中的用戶

解析 tagsStr 并根據標簽進行過濾

假設 tagsStr 是一個 JSON 格式的字符串,存儲了一個標簽集合。你希望過濾出包含所有指定標簽的用戶。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.*;
import java.util.stream.Collectors;public List<SafetyUser> filterUsersByTags(List<String> tagNameList) {// 查詢所有用戶QueryWrapper<User> queryWrapper = new QueryWrapper<>();List<User> userList = userMapper.selectList(queryWrapper);// 使用 Gson 解析 JSON 字符串Gson gson = new Gson();Type setType = new TypeToken<Set<String>>() {}.getType();// 過濾用戶return userList.stream().filter(user -> {String tagsStr = user.getTags();if (StringUtils.isBlank(tagsStr)) {return false;}Set<String> tempTagNameSet = gson.fromJson(tagsStr, setType);tempTagNameSet = Optional.ofNullable(tempTagNameSet).orElse(new HashSet<>());return tagNameList.stream().allMatch(tempTagNameSet::contains);}).map(this::getSafetyUser).collect(Collectors.toList());
}
Set<String> tempTagNameSet = gson.fromJson(tagsStr, new TypeToken<Set<String>>() {}.getType());

使用了 Gson 來將一個 JSON 格式的字符串解析為一個 Set<String> 類型

假設 tagsStr 是一個 JSON 格式的字符串,存儲了一個標簽集合。你希望將這個字符串解析為一個 Set<String>

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.Set;public class Example {public static void main(String[] args) {// 示例 JSON 字符串String tagsStr = "[\"tag1\", \"tag2\", \"tag3\"]";// 創建 Gson 實例Gson gson = new Gson();// 使用 TypeToken 獲取 Set<String> 的類型Type setType = new TypeToken<Set<String>>() {}.getType();// 解析 JSON 字符串為 Set<String>Set<String> tempTagNameSet = gson.fromJson(tagsStr, setType);// 輸出結果System.out.println(tempTagNameSet);}
}
Set<String> tempTagNameSet = gson.fromJson(tagsStr, new TypeToken<Set<String>>() {}.getType());

你的代碼片段中使用了 `Gson` 來將一個 JSON 格式的字符串解析為一個 `Set<String>` 類型。

### 完整代碼示例

假設 `tagsStr` 是一個 JSON 格式的字符串,存儲了一個標簽集合。你希望將這個字符串解析為一個 `Set<String>`。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.Set;public class Example {public static void main(String[] args) {// 示例 JSON 字符串String tagsStr = "[\"tag1\", \"tag2\", \"tag3\"]";// 創建 Gson 實例Gson gson = new Gson();// 使用 TypeToken 獲取 Set<String> 的類型Type setType = new TypeToken<Set<String>>() {}.getType();// 解析 JSON 字符串為 Set<String>Set<String> tempTagNameSet = gson.fromJson(tagsStr, setType);// 輸出結果System.out.println(tempTagNameSet);}
}

### 代碼解釋

1. **創建 Gson 實例**:

?? Gson gson = new Gson();

?? 這里創建了一個 `Gson` 實例,用于后續的 JSON 解析。

2. **獲取 `Set<String>` 的類型**:

?? Type setType = new TypeToken<Set<String>>() {}.getType();

?? - `TypeToken` 是一個輔助類,用于獲取泛型類型的 `Type`。
?? - `new TypeToken<Set<String>>() {}.getType()` 會返回一個 `Type` 對象,表示 `Set<String>` 類型。
?? - 這是因為 Java 的泛型在運行時會被擦除,所以需要通過 `TypeToken` 來保留泛型信息。

3. **解析 JSON 字符串**:

?? Set<String> tempTagNameSet = gson.fromJson(tagsStr, setType);

?? - `gson.fromJson(tagsStr, setType)` 方法將 JSON 字符串 `tagsStr` 解析為 `Set<String>` 類型。
?? - `tagsStr` 應該是一個 JSON 數組格式的字符串,例如 `["tag1", "tag2", "tag3"]`。

4. **處理空值或異常**:
?? 在實際應用中,你可能需要處理 `tagsStr` 為空或格式不正確的情況。可以添加一些額外的檢查和異常處理:

 try {if (StringUtils.isBlank(tagsStr)) {tempTagNameSet = new HashSet<>();} else {tempTagNameSet = gson.fromJson(tagsStr, setType);}} catch (Exception e) {// 處理解析異常tempTagNameSet = new HashSet<>();System.err.println("Error parsing tags: " + e.getMessage());}

tempTagNameSet = Optional.ofNullable(tempTagNameSet).orElse(new HashSet<>());

這行代碼使用了 `Optional` 類來處理可能為 `null` 的 `tempTagNameSet`。`Optional` 是 Java 8 引入的一個類,用于避免顯式的 `null` 檢查,使代碼更加簡潔和安全。

### 代碼解釋

- **`Optional.ofNullable(tempTagNameSet)`**:
? - 創建一個 `Optional` 對象,如果 `tempTagNameSet` 為 `null`,則返回一個空的 `Optional`;否則,返回一個包含 `tempTagNameSet` 的 `Optional`。

- **`.orElse(new HashSet<>())`**:
? - 如果 `Optional` 是空的(即 `tempTagNameSet` 為 `null`),則返回一個新的空 `HashSet`;否則,返回 `tempTagNameSet`。

### 作用

這行代碼的作用是確保 `tempTagNameSet` 不會為 `null`。如果 `tempTagNameSet` 為 `null`,則用一個空的 `HashSet` 替代,避免后續代碼中出現 `NullPointerException`。

### 示例

假設你從 JSON 字符串解析出的 `Set<String>` 可能為 `null`,你希望確保它不會為 `null`:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.*;public class Example {public static void main(String[] args) {// 示例 JSON 字符串String tagsStr = "[\"tag1\", \"tag2\", \"tag3\"]";// 創建 Gson 實例Gson gson = new Gson();// 使用 TypeToken 獲取 Set<String> 的類型Type setType = new TypeToken<Set<String>>() {}.getType();// 解析 JSON 字符串為 Set<String>Set<String> tempTagNameSet = null; // 假設解析失敗,tempTagNameSet 為 nulltry {tempTagNameSet = gson.fromJson(tagsStr, setType);} catch (Exception e) {e.printStackTrace();}// 確保 tempTagNameSet 不為 nulltempTagNameSet = Optional.ofNullable(tempTagNameSet).orElse(new HashSet<>());// 輸出結果System.out.println(tempTagNameSet);}
}

### 優化和注意事項

1. **異常處理**:
?? 在實際應用中,應該處理可能的異常,例如 JSON 格式錯誤或解析失敗。


?? try {
?????? tempTagNameSet = gson.fromJson(tagsStr, setType);
?? } catch (Exception e) {
?????? log.error("Error parsing tags: {}", tagsStr, e);
?????? tempTagNameSet = new HashSet<>();
?? }
?

2. **空值處理**:
?? 如果 `tagsStr` 為空或 `null`,應該提供一個默認值。


?? if (StringUtils.isBlank(tagsStr)) {
?????? tempTagNameSet = new HashSet<>();
?? } else {
?????? try {
?????????? tempTagNameSet = gson.fromJson(tagsStr, setType);
?????? } catch (Exception e) {
?????????? log.error("Error parsing tags: {}", tagsStr, e);
?????????? tempTagNameSet = new HashSet<>();
?????? }
?? }
?

3. **性能優化**:
?? 如果你需要頻繁解析類似的 JSON 字符串,可以考慮緩存 `Gson` 實例,避免每次創建新的實例。

### 完整的過濾方法

結合你的需求,以下是一個完整的過濾方法示例:


import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.*;
import java.util.stream.Collectors;public List<SafetyUser> filterUsersByTags(List<String> tagNameList) {// 查詢所有用戶QueryWrapper<User> queryWrapper = new QueryWrapper<>();List<User> userList = userMapper.selectList(queryWrapper);// 使用 Gson 解析 JSON 字符串Gson gson = new Gson();Type setType = new TypeToken<Set<String>>() {}.getType();// 過濾用戶return userList.stream().filter(user -> {String tagsStr = user.getTags();Set<String> tempTagNameSet = new HashSet<>();try {if (StringUtils.isNotBlank(tagsStr)) {tempTagNameSet = gson.fromJson(tagsStr, setType);}} catch (Exception e) {log.error("Error parsing tags for user {}: {}", user.getId(), tagsStr, e);}tempTagNameSet = Optional.ofNullable(tempTagNameSet).orElse(new HashSet<>());return tagNameList.stream().allMatch(tempTagNameSet::contains);}).map(this::getSafetyUser).collect(Collectors.toList());
}

?

?

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

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

相關文章

【應用密碼學】實驗四 公鑰密碼1——數學基礎

一、實驗要求與目的 學習快速模冪運算、擴展歐幾里得、中國剩余定理的算法思想以及代碼實現。 二、實驗內容與步驟記錄&#xff08;只記錄關鍵步驟與結果&#xff0c;可截圖&#xff0c;但注意排版與圖片大小&#xff09; 1.快速模冪運算的設計思路 快速模冪運算的核心思想…

WebSocket與Socket、TCP、HTTP的關系及區別

1.什么是WebSocket及原理 WebSocket是HTML5中新協議、新API。 WebSocket從滿足基于Web的日益增長的實時通信需求應運而生&#xff0c;解決了客戶端發起多個Http請求到服務器資源瀏覽器必須要在經過長時間的輪詢問題&#xff0c;實現里多路復用&#xff0c;是全雙工、雙向、單套…

基于C++的IOT網關和平臺4:github項目ctGateway交互協議

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C++的,可以在任何平臺上使用。 源碼指引:github源碼指引_初級代碼游戲的博客-CSDN博客 系…

【PPT制作利器】DeepSeek + Kimi生成一個初始的PPT文件

如何基于DeepSeek Kimi進行PPT制作 步驟&#xff1a; Step1&#xff1a;基于DeepSeek生成文本&#xff0c;提問 Step2基于生成的文本&#xff0c;用Kimi中PPT助手一鍵生成PPT 進行PPT渲染-自動渲染 可選擇更改模版 生成PPT在桌面 介紹的比較詳細&#xff0c;就是這個PPT模版…

拷貝多個Excel單元格區域為圖片并粘貼到Word

Excel工作表Sheet1中有兩個報表&#xff0c;相應單元格區域分別定義名稱為Report1和Report2&#xff0c;如下圖所示。 現在需要將圖片拷貝圖片粘貼到新建的Word文檔中。 示例代碼如下。 Sub Demo()Dim oWordApp As ObjectDim ws As Worksheet: Set ws ThisWorkbook.Sheets(&…

Spring是如何傳播事務的?什么是事務傳播行為

Spring是如何傳播事務的&#xff1f; Spring框架通過聲明式事務管理來傳播事務&#xff0c;主要依賴于AOP&#xff08;面向切面編程&#xff09;和事務攔截器來實現。Spring的事務傳播機制是基于Java Transaction API (JTA) 或者本地資源管理器&#xff08;如Hibernate、JDBC等…

Python-pandas-操作Excel文件(讀取數據/寫入數據)及Excel表格列名操作詳細分享

Python-pandas-操作Excel文件(讀取數據/寫入數據) 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是pandas的使用語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性。【幫幫志系列文章】&#xff1a;每…

PHP分頁顯示數據,在phpMyadmin中添加數據

<?php $conmysqli_connect(localhost,root,,stu); mysqli_query($con,"set names utf8"); //設置字符集為utf8 $sql"select * from teacher"; $resultmysqli_query($con,$sql); $countmysqli_num_rows($result); //記錄總條數$count。 $pagesize10;//每…

智能參謀部系統架構和業務場景功能實現

將以一個基于微服務和云原生理念、深度集成人工智能組件、強調實時性與韌性的系統架構為基礎,詳細闡述如何落地“智能參謀部”的各項能力。這不是一個簡單的軟件堆疊,而是一個有機整合了數據、知識、模型、流程與人員的復雜體系。 系統愿景:“智能參謀部”——基于AI賦能的…

企業級RAG架構設計:從FAISS索引到HyDE優化的全鏈路拆解,金融/醫療領域RAG落地案例與避坑指南(附架構圖)

本文較長&#xff0c;純干貨&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習內容&#xff0c;盡在聚客AI學院。 一. RAG技術概述 1.1 什么是RAG&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09; 是…

Spring Boot Validation實戰詳解:從入門到自定義規則

目錄 一、Spring Boot Validation簡介 1.1 什么是spring-boot-starter-validation&#xff1f; 1.2 核心優勢 二、快速集成與配置 2.1 添加依賴 2.2 基礎配置 三、核心注解詳解 3.1 常用校驗注解 3.2 嵌套對象校驗 四、實戰開發步驟 4.1 DTO類定義校驗規則 4.2 Cont…

理清緩存穿透、緩存擊穿、緩存雪崩、緩存不一致的本質與解決方案

在構建高性能系統中&#xff0c;緩存&#xff08;如Redis&#xff09; 是不可或缺的關鍵組件&#xff0c;它大幅減輕了數據庫壓力、加快了響應速度。然而&#xff0c;在高并發環境下&#xff0c;緩存也可能帶來一系列棘手的問題&#xff0c;如&#xff1a;緩存穿透、緩存擊穿、…

PyTorch_構建線性回歸

使用 PyTorch 的 API 來手動構建一個線性回歸的假設函數&#xff0c;數據加載器&#xff0c;損失函數&#xff0c;優化方法&#xff0c;繪制訓練過程中的損失變化。 數據構建 import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt i…

005-nlohmann/json 基礎方法-C++開源庫108杰

《二、基礎方法》&#xff1a;節點訪問、值獲取、顯式 vs 隱式、異常處理、迭代器、類型檢測、異常處理……一節課搞定C處理JSON數據85%的需求…… JSON 字段的簡單類型包括&#xff1a;number、boolean、string 和 null&#xff08;即空值&#xff09;&#xff1b;復雜類型則有…

HarmonyOS 5.0 分布式數據協同與跨設備同步??

大家好&#xff0c;我是 V 哥。 使用 Mate 70有一段時間了&#xff0c;系統的絲滑使用起來那是爽得不要不要的&#xff0c;隨著越來越多的應用適配&#xff0c;目前使用起來已經和4.3的兼容版本功能差異無礙了&#xff0c;還有些純血鴻蒙獨特的能力很是好用&#xff0c;比如&am…

Linux云計算訓練營筆記day02(Linux、計算機網絡、進制)

Linux 是一個操作系統 Linux版本 RedHat Rocky Linux CentOS7 Linux Ubuntu Linux Debian Linux Deepin Linux 登錄用戶 管理員 root a 普通用戶 nsd a 打開終端 放大: ctrl shift 縮小: ctrl - 命令行提示符 [rootlocalhost ~]# ~ 家目錄 /root 當前登錄的用戶…

macOS 安裝了Docker Desktop版終端docker 命令沒辦法使用

macOS 安裝了Docker Desktop版終端docker 命令沒辦法使用 1、檢查Docker Desktop能否正常運行。 確保Docker Desktop能正常運行。 2、檢查環境變量是否添加 1、添加環境變量 如果環境變量中沒有包含Docker的路徑&#xff0c;你可以手動添加。首先&#xff0c;找到Docker的…

Gradio全解20——Streaming:流式傳輸的多媒體應用(5)——基于WebRTC的攝像頭實時目標檢測

Gradio全解20——Streaming&#xff1a;流式傳輸的多媒體應用&#xff08;5&#xff09;——基于WebRTC的攝像頭實時目標檢測 本篇摘要20. Streaming&#xff1a;流式傳輸的多媒體應用20.5 基于WebRTC的攝像頭實時目標檢測20.5.1 環境配置及說明1. WebRTC2. TURN服務器 20.5.2 …

OSCP - Proving Grounds - NoName

主要知識點 linux命令注入SUID find提權 具體步驟 從nmap開始搜集信息&#xff0c;只開放了一個80端口 Nmap scan report for 192.168.171.15 Host is up (0.40s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http …

c++_csp-j算法 (6)_高精度算法(加減乘除)

高精度算法 C++高精度算法是指在C++編程語言中實現高精度計算的算法。在C++中,通常整數的范圍是有限的,超出這個范圍的整數計算會導致溢出。高精度算法的出現,使得C++程序能夠處理超出常規整數范圍的大整數計算,包括高精度加法、減法、乘法、除法等運算。 在C++中實現高精…