阅读说明:

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后端开发小技巧-集合初始化多种方法的更多相关文章

  1. Java开发小技巧(三):Maven多工程依赖项目

    前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...

  2. 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/ ...

  3. Java后端开发——美团(牛客)

    Java后端开发--美团(牛客) Java的基本数据类型,各自的字节数 ​ 老生常谈,不多说了. 类型 字节数 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字 ...

  4. 2022美团Java后端开发春招实习面经

    2022美团Java后端开发春招实习面经 一面 1.讲一下计算机网络的五层架构,每层分别有什么协议 ​ 五层架构:应用层.运输层.网络层.数据链路层.物理层 ​ 2.什么是 Http 协议,各种 Ht ...

  5. BizTalk开发小技巧

    BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...

  6. Java后端开发奋斗之路

    本人方向:Java后端开发方向,本文中内容持续更新中 Java技术栈:https://www.cnblogs.com/wyb666/p/10222070.html 推荐书籍:<程序员代码面试指南 ...

  7. Java后端开发常用工具

    Java后端开发常用工具推荐: 俗话说,工欲善其事,必先利其器.不过初学时候不大建议过度依赖IDE等过多工具,这会让自己的编程基础功变得很差,比如各种语法的不熟悉,各种关键字比如synchronize ...

  8. OMG,12 个精致的 Java 字符串操作小技巧,学它

    字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...

  9. Java 后端开发常用的 10 种第三方服务

    请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 严格意义上 ...

  10. 规范——Java后端开发规范

    Java后端开发规范 一.技术栈规约 二.命名规范 三.Java代码规范(注释规范.异常与日志.代码逻辑规范) 四.Mybatis与SQL规范 五.结果检查(单元测试及代码扫描) 六.安全规范 一.技 ...

随机推荐

  1. 非局域网远程访问MySQL

    使用内网穿透解决,市面上说道最多的是"花生壳" 主要操作见这篇官方说明 但其中提到的什么花生棒(第二.三点)完全不用管,应该算是产品推销. 登录后选"新增内网映射&quo ...

  2. Laravel11 从0开发 Swoole-Reverb 扩展包(三) - reverb广播驱动使用流程

    前情提要 我们第一节的时候,已经大致介绍reverb,他 是 Laravel 应用程序的第一方 WebSocket 服务器,可将客户端和服务器之间的实时通信直接带到您的指尖.开源且只需一个 Artis ...

  3. linux shell用expect实现在scp时自动输入密码

    文章目录 linux shell用expect自动输入密码 按行读取文件 expect 其他 linux shell用expect自动输入密码 最近有东西需要部署到很多服务器上去,一个服务器一个服务器 ...

  4. AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

    最近在研究AI Agent如何调用三方API,整理了一篇文章,分享给大家. 调用三方 API(Function Calling)不是通过提示词(Prompt)来实现的,而是通过函数调用机制(Funct ...

  5. Spring定时任务的秘密

    Spring定时任务的秘密 在 Spring 框架中,定时任务主要通过 @Scheduled 注解或 TaskScheduler 接口实现. 1.基本使用 在 Spring Boot 项目中,通过 @ ...

  6. [源码系列:手写spring] AOP第一节:切点表达式

    在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP.         AOP即切面编程是Spring框架中的一个 ...

  7. [每日算法 - 华为机试] leetcode680. 验证回文串 II

    入口 力扣https://leetcode.cn/problems/valid-palindrome-ii/submissions/ 题目描述 给你一个字符串 s,最多 可以从中删除一个字符. 请你判 ...

  8. VirtualBox 新建虚拟电脑时没有64-bit选项?

    好久没用VirtualBox了,没事下载了个准备看下新版的Ubuntu 16.04 & umake命令. 下载&安装完成,准备新建的时候,发现个问题:没有64-bit的选项? 目测了下 ...

  9. Quartz.NET - 教程 12: Quartz 的其他特性

    译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 12: Miscellaneous Features of Quartz 插件 Quartz 提供了一个用于插入附加功能 ...

  10. fdMemtable FDQuery json之间的一些关系

    1 procedure TForm1.btn1Click(Sender: TObject); 2 var ss,ss1: TStringStream; 3 begin 4 ss := TStringS ...