首页 > 编程语言 >java后端开发小技巧-集合初始化

java后端开发小技巧-集合初始化

时间:2023-12-22 14:55:07浏览次数:49  
标签:初始化 February Set java 后端 January #### add March


阅读说明:

1. 如果有排版格式问题,请移步https://www.yuque.com/mrhuang-ire4d/oufb8x/lu346eokyvgfao0b?singleDoc# 《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));
```

标签:初始化,February,Set,java,后端,January,####,add,March
From: https://www.cnblogs.com/itThinking/p/17921583.html

相关文章

  • 【Java】Spring、SpringBoot、SpringCloud理解和入门
    关于Spring、SpringBoot、SpringCloud我总结了几点。Spring是轻量级的容器框架,目前大多数项目不直接使用Spring的。SpringBoot是Spring的升级版,主要应用单个微服务,关联性小的项目、规模小、硬件要求不高的项目。SpringCloud基于SpringBoot来实现微服务开发组件。主要应用于规......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码......
  • vue3 + java 查询数据前后端时间不一致如何解决?
    环境:vue3+springboot+mybatis+mysql 场景:后端返回的时间与前端接收到的时间,小时不一致,时间格式是古巴标准时间:"CST"解决:在Entity中时间字段上增加注解:@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")......
  • 找到最佳优惠券组合!Java算法助力电商平台策略优化
    大家好,我是小米,一个热爱分享技术的小伙伴。最近我们电商平台迎来了一个新的需求,需要在用户下单时,高效地计算出多张平台券和店铺券的最优组合,使用户享受到最大的优惠。为了满足这一需求,我研究了一下动态规划和贪心算法,想和大家分享一下。需求背景在用户下单时,有时候我们会提供多张平......
  • java8实现分组、排序
    1、用户对象@Getter@Setter@AllArgsConstructorpublicclassUserTest{//名称privateStringuserName;//年龄privatestringage;//分数(这个无所谓啊)privatedoublescore;}2、准备数据List<UserTest>userList=newArrayList<>();......
  • Java8函数式编程应用
    我们经常提到,Java8是革命性的一个版本,原因就是正式引入了函数式编程,那Java的函数式编程在实际应用中到底有什么用呢?结合实际的应用,我整理出了函数式在Java的几个经典用途。  缓求值惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。惰性求值自然地在数据结构中包......
  • java 1.0的版本遗留 java.util.Hashtable为什么t要小写?
    实际上,Hashtable类是Java1.0版本就引入的,这是Java最早的版本之一。Hashtable是Java早期集合框架的一部分,那时还没有现在我们熟悉的java.util.Collection接口和后来的集合框架。Java1.2版本引入了新的集合框架,其中包含了诸如ArrayList,HashMap,和HashSet等现代......
  • SpringMVC处理Java8新日期类参数
    SpringMVC如何将request参数自动封装为LocalDate和LocalDateTime在使用SpringMVC时,java.util.Date类型字段可以使用@DateTimeFormat注解将application/x-www-from-urlencoded类型的请求中的字符串进行自动转换。而Java8中新的时间类型该如何支持呢?在application/x-www-from-u......
  • JavaScript中的instanceof运算符
    JavaScript中的instanceof运算符:https://blog.csdn.net/weixin_43263355/article/details/123551619?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170320923016800197085509%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170320......
  • Java中线程的生命周期
    大家好,我是joker,希望你快乐。首先说一道常见的面试题,一个线程能不能两次调用start()方法,会有什么效果?正如大家知道的,答案:不能,线程启动后不能再次启动,会报运行时异常,IllegalThreadStateException线程是什么?从操作系统的角度,可以简单的认为,线程是系统调度的最小单元,一个进程可......