java后端开发小技巧-集合初始化多种方法
阅读说明:
1.如果有排版格式问题,请移步 《后端开发小技巧-java集合创建》,选择宽屏模式效果更佳。
2. 本文为原创文章,转发请注明出处。
后端开发中集合是经常会用到的类型。java原生的集合方法难以满足要求,commons-collections库和guava库扩充了集合的功能,帮助我们写出简洁优雅的代码。maven导入方式如下。
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.3</version>
</dependency>
</dependencies>
本文将列举业务开发中List, Set, Map三大集合中常用的方法。
List
list初始化
原生方式
List<String> monthList = new ArrayList<>();
monthList.add("January");
monthList.add("February");
monthList.add("March");
匿名类方式
List<String> monthList = new ArrayList<String>() {
{
add("January");
add("February");
add("March");
}
};
数组转List方式
List<String> monthList = new ArrayList<>(Arrays.asList("January", "February", "March"));
java9方式
List<String> monthList = List.of("January", "February", "March");
guava方式
List<String> monthList = Lists.newArrayList("January", "February", "March");
java stream方式
List<String> monthList = Stream.of("January", "February", "March").collect(Collectors.toList());
不可变List
Collections.unmodifiableList方式
List<String> monthList1 = Collections.unmodifiableList(monthList);
guava方式
List<String> monthList1 = ImmutableList.<String>builder()
.add("January")
.add("February")
.add("March")
.build();
List<String> monthList2 = ImmutableList.of("January", "February", "March");
其他
判空
System.out.println(CollectionUtils.isEmpty(monthList));
System.out.println(CollectionUtils.isNotEmpty(monthList));
指定容量
List<String> monthList = Lists.newArrayListWithCapacity(100); //比原生方式new ArrayList<>(100)简单易懂
兼容null对象
CollectionUtils.emptyIfNull(monthList).forEach(System.out::println);
Set
set初始化
原生方式
Set<String> monthSet = new HashSet<>();
monthSet.add("January");
monthSet.add("February");
monthSet.add("March");
匿名类方式
Set<String> monthSet = new HashSet<String>() {
{
add("January");
add("February");
add("March");
}
};
数组转Set方式
Set<String> monthSet = new HashSet<>(Arrays.asList("January", "February", "March"));
java9方式
Set<String> monthSet = Set.of("January", "February", "March");
guava方式
Set<String> monthSet = Sets.newHashSet("January", "February", "March");
java stream方式
Set<String> monthSet = Stream.of("January", "February", "March").collect(Collectors.toSet());
不可变Set
Collections.unmodifiableSet方式
Set<String> monthSet1 = Collections.unmodifiableSet(monthSet);
guava方式
Set<String> monthSet2 = ImmutableSet.<String>builder()
.add("January")
.add("February")
.add("March")
.build();
Set<String> monthSet3 = ImmutableSet.of("January", "February", "March");
其他
判空
System.out.println(CollectionUtils.isEmpty(monthSet));
System.out.println(CollectionUtils.isNotEmpty(monthSet));
指定容量
Set<String> monthSet = Sets.newHashSetWithExpectedSize(100); //比原生方式new HashSet<>(100)简单易懂
兼容null对象
CollectionUtils.emptyIfNull(monthSet).forEach(System.out::println);
Map
map初始化
原生方式
Map<String, Integer> monthMap = new HashMap<String, Integer>();
monthMap1.put("January", 1);
monthMap1.put("February", 2);
monthMap1.put("March", 3);
匿名类方式
Map<String, Integer> monthMap = new HashMap<String, Integer>() {
{
put("January", 1);
put("February", 2);
put("March", 3);
}
};
java9新特性
Map<String, Integer> monthMap = Map.of("January", 1, "February", 2, "March", 3);
不可变map
Collections.unmodifiableMap
使用Collections.unmodifiableMap包装,转换为不可变map
Map<String, Integer> monthMap1 = Collections.unmodifiableMap(monthMap);
guava方式
支持两种写法:builder方式和of方式。
Map<String, Integer> monthMap1 = ImmutableMap.<String, Integer>builder()
.put("January", 1)
.put("February", 2)
.put("March", 3)
.build();
Map<String, Integer> monthMap2 = ImmutableMap.of(
"January", 1,
"February", 2,
"March", 3);
其他
判空
System.out.println(MapUtils.isEmpty(monthMap));
System.out.println(MapUtils.isNotEmpty(monthMap));
指定容量
Map<String, Integer> monthMap = Maps.newHashMapWithExpectedSize(100);
兼容null对象
MapUtils.emptyIfNull(monthMap).forEach((key, value) -> System.out.println(key));
v
java后端开发小技巧-集合初始化多种方法的更多相关文章
- Java开发小技巧(三):Maven多工程依赖项目
前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...
- TP开发小技巧
TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...
- Java后端开发——美团(牛客)
Java后端开发--美团(牛客) Java的基本数据类型,各自的字节数 老生常谈,不多说了. 类型 字节数 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字 ...
- 2022美团Java后端开发春招实习面经
2022美团Java后端开发春招实习面经 一面 1.讲一下计算机网络的五层架构,每层分别有什么协议 五层架构:应用层.运输层.网络层.数据链路层.物理层 2.什么是 Http 协议,各种 Ht ...
- BizTalk开发小技巧
BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...
- Java后端开发奋斗之路
本人方向:Java后端开发方向,本文中内容持续更新中 Java技术栈:https://www.cnblogs.com/wyb666/p/10222070.html 推荐书籍:<程序员代码面试指南 ...
- Java后端开发常用工具
Java后端开发常用工具推荐: 俗话说,工欲善其事,必先利其器.不过初学时候不大建议过度依赖IDE等过多工具,这会让自己的编程基础功变得很差,比如各种语法的不熟悉,各种关键字比如synchronize ...
- OMG,12 个精致的 Java 字符串操作小技巧,学它
字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...
- Java 后端开发常用的 10 种第三方服务
请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 严格意义上 ...
- 规范——Java后端开发规范
Java后端开发规范 一.技术栈规约 二.命名规范 三.Java代码规范(注释规范.异常与日志.代码逻辑规范) 四.Mybatis与SQL规范 五.结果检查(单元测试及代码扫描) 六.安全规范 一.技 ...
随机推荐
- Web前端入门第 13 问:HTML 标签和属性是否区分大小写?
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 注意:以下截图都来源于 Chrome 浏览器,不同浏览器可能会产生不同的渲染结果. 思考一个问题:英文写法都分大 ...
- wincurl:一款基于HTTP协议的轻量级web资源抓取和上传工具
编写web程序经常要进行接口调测,通常我们会使用curl或者postman等工具,通过这些工具可以方便的发送GET或POST请求来验证接口的正确与否. 对于复杂的接口业务,我们可以通过这些工具构造po ...
- 【Vue3】下载zip文件损坏的问题
需求: 需要在vue3上实现Asp.net Web API 下载zip包的功能,本身需求很简单,但是中间遇到了问题,记录一下. 问题: 下载的zip包和后端的zip包大小不一致,后端生成的zip 61 ...
- AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理
引言 自然语言处理(Natural Language Processing, NLP)是人工智能领域中最具活力和潜力的分支之一.从智能客服到机器翻译,再到语音识别,NLP技术正以其强大的功能改变着我们 ...
- OpenGL与GLSL各版本对应说明
OpenGL 4.6 (API Core Profile) (API Compatibility Profile) OpenGL Shading Language 4.60 Specification ...
- 网络设备开局配置生成器(第三次更新) QQ交流群:(4817315)
下载:链接: https://pan.baidu.com/s/1BIvh3u7VfbaQtBsUOjl1IA?pwd=kgtw 提取码: kgtw 网络设备开局配置生成器(SecureCRT vbs脚 ...
- DeepSeek 官方推出的实用集成工具百宝箱,建议收藏!
项目介绍 该实用集成工具百宝箱汇聚了DeepSeek官方精心挑选和推荐的各类集成工具(其中包括:应用程序.AI Agent 框架.AI数据应用框架.RAG 框架.浏览器插件.VS Code 插件等), ...
- 【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题
[QT]解决生成的exe文件出现"无法定位程序入口"或"找不到xxx.dll"的问题 零.问题 使用QT编译好项目后,想直接在文件资源管理器中运行exe程序或想 ...
- unigui的程序编译后自动运行傻傻的手动【7】
我们每次修改unigui程序后,一般需要编译后执行,查看效果.可是每次都要关闭杀掉服务程序,再刷新浏览器才能实现. EMB应该知道这个反人类的做法吧.实际上提供了参数配置:自动kill服务程序,自动打 ...
- 【U-Boot】解决U-Boot的“Unknown command 'help' - try 'help'”问题
[U-Boot]解决U-Boot的"Unknown command 'help' - try 'help'"问题 零.起因 最近在玩U-Boot,自己编译U-Boot之后输入hel ...