1 前言
在写业务的时候,我们经常碰到对集合的使用,并经常使用其多种状态等等,今天小记一下最顺手的实现方式,以便开发中使用。
2 创建空集合
在包 java.util.Collections下提供的静态方法;
- 创建空List:
List<T> emptyList()
- 创建空Map:
Map<K, V> emptyMap()
- 创建空Set:
Set<T> emptySet()
注意:
返回的空集合是不可变集合,无法向其中添加或删除元素。
3 创建单元素集合
在包 java.util.Collections下提供的静态方法;
- 创建一个元素的List:
List<T> singletonList(T o)
- 创建一个元素的Map:
Map<K, V> singletonMap(K key, V value)
- 创建一个元素的Set:
Set<T> singleton(T o)
注意:
返回的集合是不可变集合,无法向其中添加或删除元素。
4 创建多元素集合
在包 java.util.Arrays下提供的静态方法;
- 创建多元素的List:
List<T>
asList(T....a)
注意:
返回的集合是不可变集合,无法向其中添加或删除元素。
5 List转Map
5.1.收集对象实体本身
- 在开发过程中我们也需要有时候对自己的list中的实体按照其中的一个字段进行分组(比如 id ->List),这时候要设置map的value值是实体本身
public Map<Long, Account> getIdAccountMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId,Function.identity())); }
注意: 此方法最好是选中Map的key的字段是唯一的,要不然这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key。这时候就要在toMap方法中指定当key冲突时key的选择。(这里是选择第二个key覆盖第一个key)
public Map<String, Account> getNameAccountMap(List<Account> accounts) {
return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));
}
特别说明:如果Map的key选中的字段不能保证唯一,那就用stream流的Collectors.groupingBy()方法。具体用法JAVA8新特性之Stream API_jothan的博客-优快云博客1 前言1.1 对Stream流的个人理解:①它和IO流是不一样的;②它是对数据源(集合,数组等)进行一系列的中间操作,产生一个新的流或者说我们想要的结果,并且对数据源不产生影响。③集合讲的是数据,流讲的是计算。1.2Stream流操作的三个步骤创建Stream中间操作:对数据源数据进行处理终端操作:执行中间操作,并产生结果注意: 从终端操作可以看出stream流是延迟执行的,只有执行终端操作(想要需要的结果)的时候才执行中间操作2 下面我们对Stream的三个步骤一一说明2
https://blog.youkuaiyun.com/studyhard_/article/details/107594865
5.2.收集对象为实体的某个属性
public Map<Long, String> getIdNameMap(List<Account> accounts) {
return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
}
- 其中第一个参数就是key,第二个参数(value)就是实体属性的值。