集合的常用形式的简单创建

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的博客-CSDN博客1 前言1.1 对Stream流的个人理解:①它和IO流是不一样的;②它是对数据源(集合,数组等)进行一系列的中间操作,产生一个新的流或者说我们想要的结果,并且对数据源不产生影响。③集合讲的是数据,流讲的是计算。1.2Stream流操作的三个步骤创建Stream中间操作:对数据源数据进行处理终端操作:执行中间操作,并产生结果注意: 从终端操作可以看出stream流是延迟执行的,只有执行终端操作(想要需要的结果)的时候才执行中间操作2 下面我们对Stream的三个步骤一一说明2https://blog.csdn.net/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)就是实体属性的值。 

6 完结 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值