当前位置: 首页 > news >正文

C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3

java 项目结构 文件说明 潜规则 java入门-CSDN博客

C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2-CSDN博客

java注解 好像和C# 特性 差不多

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

在Java中,@Data@Builder@NoArgsConstructor@AllArgsConstructor是Lombok库提供的注解,它们用于简化Java对象的创建和处理。Lombok是一个流行的Java库,旨在减少样板代码的编写,让开发者能够更专注于业务逻辑。下面是这些注解的简要说明:

  1. @Data

    • 这是一个聚合注解,它自动为类生成getter和setter方法、toString()equals()hashCode()方法。它还包含了@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor的功能。
  2. @Builder

    • 这个注解用于在类上创建一个builder模式的构建器,允许通过链式调用来设置对象的属性。使用@Builder注解可以很容易地创建对象,特别是当对象有很多属性时。
  3. @NoArgsConstructor

    • 这个注解让Lombok为类生成一个无参的构造函数。这对于创建没有初始值的对象实例很有用。
  4. @AllArgsConstructor

    • 这个注解让Lombok为类生成一个包含所有属性的构造函数。这对于创建完全初始化的对象实例很有用。

这些注解通常用于模型类或DTO(数据传输对象),以减少手动编写常见方法的时间。例如,一个使用这些注解的简单类可能看起来像这样:

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {private String name;private int age;private String email;
}

在这个例子中,Person类将自动拥有以下功能:

  • Getter和Setter方法
  • toString()equals()hashCode()方法
  • 一个无参构造函数
  • 一个包含所有属性的构造函数
  • 一个builder模式的构建器

使用这些注解,你可以这样创建Person对象:

Person person = new Person();
Person personWithAllArgsConstructor = new Person("John Doe", 30, "john.doe@example.com");
Person personWithBuilder = Person.builder().name("Jane Doe").age(25).email("jane.doe@example.com").build();

请注意,要使用Lombok注解,你需要在项目中添加Lombok依赖,并在IDE中安装相应的插件,以便正确地识别和处理这些注解。

java String 变LocalDateTime

//2024-09-29 12:30
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(createReqVO.getSolDeliveryDate(), formatter);
order.setSolDeliveryDate(dateTime);

JAVA 集合

List<Map<String, Object>> listMch = new ArrayList<>();
        Map<String, Object> mch1 = new HashMap<>();

List<Map<String, Object>> listMch = new ArrayList<>();Map<String, Object> mch1 = new HashMap<>();mch1.put("mchName", "海口");mch1.put("userId", 0);mch1.put("mchId", 4);mch1.put("warehouseId", 0);listMch.add(mch1);

您提供的代码是Java语言的一段示例,它创建了一个列表 listMch,该列表存储了一个映射(Map)的集合,每个映射代表一个商户(mch)的信息。然后,代码创建了一个 HashMap 实例 mch1,并向其中添加了几个键值对来存储特定商户的信息,最后将这个映射添加到了列表 listMch 中。

这里是代码的详细解释:

  1. List<Map<String, Object>> listMch = new ArrayList<>();

    • 这行代码创建了一个 ArrayList,它的泛型参数是 Map<String, Object>。这意味着 listMch 可以存储 Map 对象的列表,其中每个 Map 的键是 String 类型,值是 Object 类型。
  2. Map<String, Object> mch1 = new HashMap<>();

    • 这行代码创建了一个 HashMap 实例 mch1,它也是键值对的集合,键是 String 类型,值是 Object 类型。
  3. mch1.put("mchName", "海口");

    • 这行代码向 mch1 映射中添加了一个键值对,键是 "mchName",值是字符串 "海口"
  4. mch1.put("userId", 0);

    • 向 mch1 映射中添加了另一个键值对,键是 "userId",值是整数 0
  5. mch1.put("mchId", 4);

    • 再次向 mch1 映射中添加键值对,键是 "mchId",值是整数 4
  6. mch1.put("warehouseId", 0);

    • 向 mch1 映射中添加最后一个键值对,键是 "warehouseId",值是整数 0
  7. listMch.add(mch1);

    • 最后,这行代码将填充好的 mch1 映射添加到 listMch 列表中。

这段代码通常用于初始化数据,可能用于测试、数据模型的演示或者在应用程序中创建一个包含商户信息的列表。每个映射可以看作是数据库中的一行记录或者是一个JSON对象。在实际的应用程序中,这些数据可能会被用来填充用户界面、进行业务逻辑处理或者通过网络发送到其他服务。

JAVA 集合 再包一层集合

Map<String, List<Map<String, Object>>> result = new HashMap<>();

result.put("listMch", listMch);

在您提供的代码片段中,您创建了一个类型为 Map<String, List<Map<String, Object>>>result 变量,并将其实例化为一个 HashMap。然后,您将之前创建的 listMch(它是一个 List<Map<String, Object>> 类型的变量)添加到 result 映射中,键为 "listMch"

这里是代码的详细解释:

  1. Map<String, List<Map<String, Object>>> result = new HashMap<>();

    • 这行代码创建了一个 HashMap 实例 result。这个映射的键是 String 类型,值是 List<Map<String, Object>> 类型。这意味着 result 可以存储一个或多个键值对,其中每个键都映射到一个列表,列表中的每个元素都是一个映射(Map),映射的键和值都是 Object 类型。
  2. result.put("listMch", listMch);

    • 这行代码调用 result 映射的 put 方法,将键 "listMch" 和值 listMch 添加到映射中。这里的 listMch 是一个之前定义的 List<Map<String, Object>> 类型的变量,它包含了商户信息的列表。

这段代码通常用于将数据组织成层次结构,以便于后续处理或传输。例如,您可能需要将这些数据发送到前端应用程序,或者在内部逻辑中使用这些数据。

在实际应用中,result 映射可以被序列化为JSON格式,以便于通过网络发送,或者在不同的系统和组件之间进行数据交换。例如,如果您使用Jackson或Gson这样的JSON库,您可以轻松地将 result 转换为JSON字符串:

import com.fasterxml.jackson.databind.ObjectMapper;// ...ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(result);
System.out.println(jsonString);

多维数据 属性规格

/** * 属性数组,JSON 格式 */@TableField(typeHandler = JacksonTypeHandler.class) 
private List<Property> properties;/*** 商品属性*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Property {/*** 属性编号* 关联 {@link ProductPropertyDO#getId()}*/private Long propertyId;/*** 属性名字* 冗余 {@link ProductPropertyDO#getName()}** 注意:每次属性名字发生变化时,需要更新该冗余*/private String propertyName;/*** 属性值编号* 关联 {@link ProductPropertyValueDO#getId()}*/private Long valueId;/*** 属性值名字* 冗余 {@link ProductPropertyValueDO#getName()}** 注意:每次属性值名字发生变化时,需要更新该冗余*/private String valueName;}

在Java中,如果你想要循环遍历一个List<ProductPropertyValueDetailRespDTO>列表,并查找其中skuId属性值不一样的对象,你可以使用一个简单的for循环或者forEach循环来实现。以下是两种常见的方法:

JAVA  forEach循环list对象 set 更新list某属性值

import java.util.List;// 假设你有一个List<ProductPropertyValueDetailRespDTO>类型的列表
List<ProductPropertyValueDetailRespDTO> list = ...;// 使用forEach循环遍历列表
list.forEach((dto, index) -> {if (index > 0 && !dto.getSkuId().equals(list.get(index - 1).getSkuId())) {// 找到skuId属性值不一样的对象System.out.println("找到skuId属性值不一样的对象: " + dto);}
});
if(sku.getProperties()!=null)
{sku.getProperties().forEach(t->t.setSkuId(id));
} 

在这个例子中,forEach循环提供了当前遍历到的对象dto和它的索引index。通过比较当前对象的skuId与前一个对象的skuId(通过索引index - 1获取),可以找到skuId属性值不一样的对象。

JAVA For使用传统的for循环list对象

import java.util.List;// 假设你有一个List<ProductPropertyValueDetailRespDTO>类型的列表
List<ProductPropertyValueDetailRespDTO> list = ...;// 假设你有一个引用,用于保存上一个遍历到的对象
ProductPropertyValueDetailRespDTO previousDto = null;for (ProductPropertyValueDetailRespDTO dto : list) {if (previousDto != null && !dto.getSkuId().equals(previousDto.getSkuId())) {// 找到skuId属性值不一样的对象System.out.println("找到skuId属性值不一样的对象: " + dto);}previousDto = dto;
}
if(sku.getProperties()!=null)
{List<CartDO> cartList = cartMapper.selectListByUserIdAndSpuId(userId,cart.getSpuId());for (CartDO dto : cartList) {if (!cart.getSkuId().equals(dto.getSkuId())) {throw exception(CARD_ITEM_NOTDOUBLE_FOUND);}}
}

在这个例子中,previousDto用于保存上一个遍历到的ProductPropertyValueDetailRespDTO对象。在每次循环中,都会检查当前对象的skuId是否与上一个对象的skuId不同。如果不同,就表示找到了一个skuId属性值不一样的对象。

疑问:为什么 Controller 分成 Admin 和 App 两种?

提供给 Admin 和 App 的 RESTful API 接口是不同的,拆分后更加清晰。

疑问:为什么 VO 分成 Admin 和 App 两种?

相同功能的 RESTful API 接口,对于 Admin 和 App 传入的参数、返回的结果都可能是不同的。例如说,Admin 查询某个用户的基本信息时,可以返回全部字段;而 App 查询时,不会返回 mobile 手机等敏感字段。

疑问:为什么 DO 不作为 Controller 的出入参?

  1. 明确每个 RESTful API 接口的出入参。例如说,创建部门时,只需要传入 name、parentId 字段,使用 DO 接参就会导致 type、createTime、creator 等字段可以被传入,导致前端同学一脸懵逼。
  2. 每个 RESTful API 有自己独立的 VO,可以更好的设置 Swagger 注解、Validator 校验规则,而让 DO 保持整洁,专注映射好数据库表。

当前时间

LocalDateTime.now()

项目备注  当前登入人

getLoginUserId()

插件设置

代码热加载

在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果在项目小时,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的速度变慢,等待时间 1-2 min 是比较常见的。

这样就导致我们开发效率降低,影响我们的下班时间,哈哈哈~

那么是否有方式能够实现,在我们修改完 Java 代码之后,能够不重启项目呢?答案是有的,通过 代码热加载 的方式。实现方案有三种:

  1. spring-boot-devtools【不推荐】
  2. IDEA 自带 HowSwap 功能【推荐】
  3. JRebel 插件【最推荐】

1. spring-boot-devtools

spring-boot-devtools (opens new window)是 Spring Boot 提供的开发者工具,它会监控当前应用所在的 classpath 下的文件发生变化,进行自动重启

devtools 存在重启速度较慢的问题,所以不推荐!

#2. IDEA 自带 HowSwap 功能

该功能是 IDEA Ultimate 旗舰版的专属功能,不支持 IDEA Community 社区版。

#2.1 如何使用

① 设置 Spring Boot 启动类,开启 HotSwap 功能。如下图所示:

IDEA 配置热加载

② Debug 运行该启动类,等待项目启动完成。

③ 每次修改 Java 代码后,点击左下角的「热加载」按钮,即可实现代码热加载。如下图所示:

IDEA 代码热加载

#2.2 存在问题

IDEA 自带 HowSwap 功能,支持比较有限,很多修改都不支持。例如说:

  • 只能增加方法或字段但不可以减少方法或字段
  • 只能增加可见性不能减少
  • 只能维持已有方法的签名而不能修改等等。

你可以认为,只支持方法内的代码修改热加载。

如果想要相对完美的方案,建议使用 JRebel 插件。

#3. JRebel 插件【最推荐】

JRebel 插件是目前最好用的热加载插件,它支持 IDEA Ultimate 旗舰版、Community 社区版。

相关文章:

C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3

java 项目结构 文件说明 潜规则 java入门-CSDN博客 C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2-CSDN博客 java注解 好像和C# 特性 差不多 Data Builder NoArgsConstructor AllArgsConstructor 在Java中&#xff0c;Data、Builder、NoArgsConstructor和Al…...

2024年9月个人工作生活总结

本文为 2024年9月工作生活总结。 研发编码 vuepress构建的几个问题 某vuepress项目&#xff0c;是我在3年多以前自行构想自行着手搞的&#xff0c;主要用于将一些常用的数据文件&#xff08;markdown样式&#xff09;渲染成html网页文件&#xff0c;在自建服务程序里开启访问…...

JVM有哪些参数以及如何使用

JVM&#xff08;Java虚拟机&#xff09;参数用于调整和优化Java应用程序的性能和行为。这些参数主要分为标准参数、非标准参数&#xff08;以-X开头&#xff09;和高级参数&#xff08;以-XX开头&#xff09;。以下是一些常见的JVM参数及其使用方法&#xff1a; 标准参数 -se…...

STM32编码器接口解析及抗噪声措施探讨

1. 引言 在现代控制系统中&#xff0c;编码器扮演着非常重要的角色。它就像一个精密的测量工具&#xff0c;可以告诉我们机械部件的位置和运动状态。在STM32微控制器中&#xff0c;编码器接口可以轻松地与各种编码器连接&#xff0c;实现精确的控制。我将在这里探讨STM32编码器…...

微软发布Windows 11 2024更新,新型Copilot+ AI PC功能亮相

前言 微软在Windows 11的2024更新中加强了对人工智能的应用&#xff0c;推出了新功能Copilot。 此次更新的版本号为26100.1742&#xff0c;Copilot将首先在Windows Insider中推出&#xff0c;计划于11月向特定设备和市场推广&#xff0c;用户需开启“尽快获取最新更新”选项以…...

鹏哥C语言68-70---位操作符+单目操作符+关系操作符

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <time.h> //--------------------------------------------------------------------------------------------------------4.位操作符 // &----按&#xff08;2进制…...

showdoc二次开发

showdoc用的vue版本老&#xff0c;需要安装老版本nodejs&#xff0c;比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…...

力扣16~20题

题16&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 双指针法&#xff0c;和15题差不多&#xff0c;就是要排除了&#xff0c;如果total<target则排除了更小的&#xff08;left右移&#xff09;&#xff0c;如果total>target则排除了更大的&#xff08;rig…...

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示&#xff1b; 2、不管是正确的输入&#xff0c;还是错误的输入&#xff0c;都只显示两种情况&#xff0c;true or false&#xff1b; 3、在正确的输入下&#xff0c;输入and 1 1/and 1 2发现可以判断&#xff1b; 布尔盲注常用函数&…...

最后30天,你的系统集成项目管理工程师备考进度到哪儿了?

十一长假归来好&#xff01; 此次归来之后&#xff0c;2024年下半年软考倒计时就从4字头切换到了3字头&#xff0c;今天距离考试还有32天&#xff01; 那么问题来了&#xff0c;临近考试还有30天左右的时候&#xff0c;你的备考进度到哪里了呢&#xff1f; 其实无论目前你的实际…...

网络安全事件的发生,主要原因是什么

网络安全事件的发生&#xff0c;主要原因涉及多个方面&#xff0c;包括技术漏洞、人为因素、经济利益驱动、恶意软件和病毒威胁、社会工程学攻击、内部人员恶意行为、供应链安全问题以及法律法规的不完善等。以下是对这些原因的详细分析&#xff1a; 技术漏洞&#xff1a; 软件…...

【leetcode】274.H指数

为了方便&#xff0c;将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值&#xff0c;该数值为“最大”的满足「至少发表了 x 篇论文&#xff0c;且每篇论文至少被引用 x 次」定义的合法数&#xff0c;重点是“最大”。 用题面的实例 1 来举个 &#x1f330;&#xff0…...

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)

一、字面量 1、基本介绍 在代码中&#xff0c;被写直接下来的、不需要通过变量存储的值&#xff0c;称之为字面量 2、常用值类型 类型说明数字&#xff08;Number&#xff09;整数&#xff08;int&#xff09;&#xff0c;例如&#xff1a;10、-10浮点数&#xff08;float&…...

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失&#xff08;Vanishing Gradient&#xff09; 和梯度爆炸&#xff08;Exploding Gradient&#xff09; 是神经网络训练中的常见问题&#xff0c;特别是在深层神经网络&#xff08;DNN&#xff09;或递归神经网络&#xff08;RNN&#xff09;中。这两者主要与反向传播算…...

在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中&#xff0c;重新封装http模块可以提供一个更简洁、更易于使用的API&#xff0c;同时隐藏底层细节&#xff0c;使开发者能够更专注于业务逻辑。以下是一个简单的示例&#xff0c;展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块&#xff1a; // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響&#xff0c;更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面&#xff0c;並增加了一些新的功能&#xff0c;像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)

1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题&#xff0c;面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序&#xff0c;通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分

目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化&#xff0c;它会随着Pod的结束而销…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...