首页 > 其他分享 >3月技术点01

3月技术点01

时间:2023-12-07 15:12:21浏览次数:24  
标签:map 01 hashSet CollUtil 技术 myPost new null

3月技术点01 

  
序号 标题 内容
1

多线程新方式应用

 CompletableFuture<List<CbWareSkuRespDTO>> queryWareSkuFuture = CompletableFuture.supplyAsync(() -> 

                mallClient.post2List(CbApiPathConstant.WARE_SKU_PATH, cbWareSkuReqDTO, CbWareSkuRespDTO.class), executor); 

        queryWareSkuFuture.handle((BiFunction<List<CbWareSkuRespDTO>, Throwable, Object>) (cbWareSkuRespDTOS, throwable) -> { 

            cbWareSkuRespDTOs.addAll(cbWareSkuRespDTOS); 

            return cbWareSkuRespDTOS; 

        }); 

        CompletableFuture<List<CbWareServiceContentRespDTO>> queryServiceContentFuture = CompletableFuture.supplyAsync(() -> 

                mallClient.post2List(CbApiPathConstant.WARE_SERVICE_CONTENT_PATH, null, CbWareServiceContentRespDTO.class), executor); 

        queryServiceContentFuture.handle((BiFunction<List<CbWareServiceContentRespDTO>, Throwable, Object>) (cbWareServiceContentRespDTOS, throwable) -> { 

            cbWareServiceContentRespDTOs.addAll(cbWareServiceContentRespDTOS); 

            return cbWareServiceContentRespDTOS; 

        }); 

        CompletableFuture.allOf(queryWareSkuFuture, queryServiceContentFuture).whenComplete((v, th) -> { 

            CbWareSkuRespDTO cbWareSkuRespDTO = cbWareSkuRespDTOs.stream().filter(wareSku -> wareSku.getSkuNo().equals(reqDTO.getSkuId())).findFirst().orElse(null); 

            atomicReference.set(this.convertOsWareRespDTO(cbWareSkuRespDTO, cbWareServiceContentRespDTOs)); 

        }).join(); 

2

创建 hashMap 方式,设置容量时已考虑加载因子

CollectionUtils.newHashMap(10);  org.srping.framework.util 5.3 以后版本

3

原子性设置 引用对象

AtomicReference<OsWareSkuRespDTO> atomicReference = new AtomicReference<>(new OsWareSkuRespDTO());

4

枚举中可加,可以省去写构造方法

类加注解 @AllArgsConstructor

5

枚举中根据 value  找 desc

public static OsWareDeliveryTypeEnum getEnumByCode(Integer code) {

        return Stream.of(values()).filter(element -> element.getCode().equals(code)).findFirst().orElse(null);

    }

6、

Hutool 组件使用说明

hashMap to bean  字段名不一致情况

 

pblic static void main(String[] args) {

    HashMap<String, Object> map = CollUtil.newHashMap();

    map.put("a_id", 1);

    map.put("b_name", "张三");

    // 设置别名,用于对应bean的字段名

    HashMap<String, String> mapping = CollUtil.newHashMap();

    mapping.put("a_id", "id");

    mapping.put("b_name", "name");

    TestBean bean = BeanUtil.toBean(map, TestBean.class, CopyOptions.create().setFieldMapping(mapping));

    System.out.println(bean);

}

7、  字符串处理--Hutool  // 填充字符串模板

String format = StrUtil.format("a的值为{a}, b的值为{b}", Map.of("a", "aValue", "b", "bValue"));

8  集合框架使用--Hutool  

// 新建一个HashSet

Set<Integer> hashSet = CollUtil.newHashSet(1, 2, 3);

Set<Integer> linkedHashSet = CollUtil.newLinkedHashSet(4, 2, 3); 

// 两个集合取交集

Collection<Integer> intersection = CollUtil.intersection(hashSet, linkedHashSet); 

// 两个集合取并集

Collection<Integer> union = CollUtil.union(hashSet, linkedHashSet); 

// 两个集合取差集

Collection<Integer> disjunction = CollUtil.disjunction(hashSet, linkedHashSet); 

// 判断一个集合是否为null或空集

boolean empty = CollUtil.isEmpty(hashSet); 

// 创建一个ArrayList

List<Integer> arrayList = ListUtil.toList(1, 2, 3); 

// 创建一个LinkedList

List<Integer> linkedList = ListUtil.toLinkedList(1, 2, 3);

9 请求HttpClient,请求失败时,多次发起请求

HttpClient client = new HttpClient();
PostMethod myPost = new PostMethod(url);
if (StringUtils.isNotBlank(sessionKey)) {
Header header = new Header();
header.setName("Session-Key");
header.setValue(sessionKey);
myPost.setRequestHeader(header);
}
client.getParams().setSoTimeout(300 * 1000);
String responseString = null;

//重试策略;如果http请求出错,默认三次重试
myPost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
myPost.setRequestEntity(new StringRequestEntity(jsonStr, "application/json", "utf-8"));
int statusCode = client.executeMethod(myPost);

if (statusCode == HttpStatus.SC_OK) {
BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream());
byte[] bytes = new byte[1024];
 ByteArrayOutputStream bos = new ByteArrayOutputStream();
int count = 0;
while ((count = bis.read(bytes)) != -1) {
bos.write(bytes, 0, count);
 }
byte[] strByte = bos.toByteArray();
 responseString = new String(strByte, 0, strByte.length, "utf-8");
 bos.close();
 bis.close();
}
  将数组转换成 数据流 可执行filter,map 等
Stream.of(new Integer[]{1,2,4,5})
  AtomicReference 的应用

// 订单商品总数
AtomicReference<Integer> totalCount = null;
totalCount.updateAndGet(v -> v + detail.getCount());

:重点使用特性应用在lamda表达式 可以修改特性, 正常非final 变量不可变在lamda表达式 foreach中。

  字符串拼接
StrUtil.format("{}{}", NumberUtil.decimalFormat("#.##", distance), "m");
  stream聚合使用
BigDecimal discountAmountTotal = cbCanUseCouponList.stream().filter(e -> e.getDiscountAmount() != null && e.getSelected())
.map(e -> BigDecimal.valueOf(e.getDiscountAmount())).reduce(BigDecimal.ZERO, BigDecimal::add);
  字符串通配符匹配

PatternMatchUtils.simpleMatch((/api/mall/**).split(StrUtil.COMMA), uri);
可以匹配 /api/mall/categoryList ,/api/mall/list 等

  与当前时间比较
LocalDateTime.parse(notice.getBeginDate()
, DateTimeFormatter.ofPattern(DatePattern.UTC_MS_WITH_ZONE_OFFSET_PATTERN)).isBefore(LocalDateTime.now())
 
list根据列 取最小
UserInfo user=   listUser.stream().min((o1,o2)->o1.getId().compareTo(o2.getId())).orElse(null);
UserInfo user2=listUser.stream().min(new Comparator<UserInfo>() {
@Override
 public int compare(UserInfo o1, UserInfo o2) {
if(o1==null || o2==null){
return 0;
 }
return o1.getId().compareTo(o2.getId());
 }
}).orElse(null);
System.out.println("user.toString() = " + user.toString());
  do/dto/vo 说明
  • 数据对象:xxxDO,xxx即为数据表名

  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。

  • 展示对象:xxxVO,xxx一般为网页名称。

  • POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

标签:map,01,hashSet,CollUtil,技术,myPost,new,null
From: https://www.cnblogs.com/liyanbofly/p/17882045.html

相关文章

  • luogu P3783 [SDOI2017] 天才黑客
    题面传送门为啥大家都写两个log的线段树优化建边啊,神秘,这1log做法好想又好写捏。首先显然是可以把边看成点的,这样会变成\(O(m)\)个点和\(O(m^2)\)条边,寄。但是还没有完全寄掉,我们发现,对于原图的每个点,对于第一个跑到这个点的边暴力转移,剩下的边转移只有一个子树,否则会......
  • 测试用例设计方法六脉神剑——第二剑:招式组合,因果判定出世 | 京东物流技术团队
    1引言上篇讲了等价类划分和边界值分析法,而这两种方法只考虑了单个的输入条件,并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板,因果图法和判定表法应运而生。2因果图法2.1概念及原理2.1.1定义一种描述输入条件的组合以及每种组合对应的输出的图形化工......
  • 活动预告 | 中国数据库联盟(ACDU)中国行第四站定档西安,邀您探讨数据库前沿技术
    作为墨天轮社区与中国数据库联盟的品牌活动之一,【ACDU中国行】已走过深圳、杭州、成都三大城市,在线下汇集数据库领域的行业知名人士,共同探讨数据库前沿技术及其应用,促进行业发展和创新,同时也为开发者们提供一个友好交流的平台。 12月23日下午,【ACDU中国行】将前往古城西安,......
  • 【UVA 101】The Blocks Problem 题解(模拟+向量)
    计算机科学的许多领域使用简单、抽象的领域进行分析和实证研究。例如,早期的人工智能规划和机器人研究(STRIPS)使用了一个区块世界,其中机器人arm执行涉及块操作的任务。在这个问题中,您将在某些规则和约束下对一个简单的块世界进行建模。相当地与确定如何达到指定状态相比,您将“编程......
  • 高级实现Java的七大热门技术框架解析源码特性分析
    设计模式是软件开发中常用的解决方案,可以帮助我们构建灵活可扩展的应用程序。本文将深入探讨Java的七大经典设计模式,并提供相关示例代码。一、单例模式单例模式确保一个类只有一个实例,并提供全局访问点。以下是一个简单的单例模式示例代码:publicclassSingleton{privatesta......
  • 【SQLServer2019管理】备份环境包含数据库
    恢复报错信息:sp_configure值'containeddatabaseauthentication'必须设置为1才能创建包含的数据库。您可能需要使用RECONFIGURE设置value_in_use。(MicrosoftSQLServer,错误:12824)execsp_configure'containeddatabaseauthentication',1GOreconfigure;Go ......
  • 共享内存技术调研
    共享内存技术调研1.     研究目的在调研仿真分布式解决方案时遇到一个问题,在服务器中不同软件之间如何高效的进行通讯,这里涉及到了不同的操作系统(windows和Linux),不同的使用功能(虚实融合,数字仿真),需求不同需要的信息传递效率要求不同,因此需要调研现有的技术,找到适合使用......
  • Exploring Advanced WiFi 6 Solutions: QCN6122 vs. QCN6102 with IPQ5018 Platform
    ExploringAdvancedWiFi6Solutions:QCN6122vs.QCN6102withIPQ5018PlatformIntherealmofhigh-performanceWiFi6solutions,theQCN6122andQCN6102,bothintegratedwiththeIPQ5018platform,standoutfortheirversatilityinembeddedandindustrial......
  • 2023年全国计算机技术与软件专业资格(水平)考试成绩可以查询了
    2023年全国计算机技术与软件专业资格(水平)考试成绩可以查询了查询网址:https://bm.ruankao.org.cn/分数线据说是相对固定的,卷面分的60%算,也就是45分达标,50+43分的我已哭晕在厕所。......
  • P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
    题意给定序列\(s\),每次询问\(l,r\)的区间众数的出现次数。强制在线。空间:\(62.5MB\)。Sol蒲公英卡常卡空间版。考虑优化那个\(n\timesm\)的数组。我们要求\(l,r\)之中某个数的个数。乍一看不好弄,仔细想想就会发现,如果我们知道当前的最优答案。在长常数时间内就......