Java8 Stream,List转Map遇到key冲突问题-java.lang.IllegalStateException: Duplicate key

在使用Java8 Stream将List转换为Map的过程中遇到了`java.lang.IllegalStateException: Duplicate key`异常。问题源于重复的键。解决办法包括:1) 覆盖旧值,例如通过`(v1, v2) -> v2`来确保新值覆盖旧值;2) 改变数据结构,如使用`Map<String, List<Cat>>`来存储多个值。建议使用唯一键避免冲突。" 110871461,9857233,Hive建表错误:Column length too big - 解决方案,['hive'],"['Hive', '错误', 'PARAM_VALUE', 'BLOB', 'TEXT', '解决方法', 'MySQLSyntaxErrorException']
摘要由CSDN通过智能技术生成

在使用Stream把List转化为Map的时候,抛出了java.lang.IllegalStateException: Duplicate key异常,原因在于生成Map的key出现冲突。

查看如下代码:

当我们根据猫的名字创建名称Map的时候,发现有2个相同的cat2,导致了产生IllegalStateException异常

package com.bytrees.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.junit.Assert;
import org.junit.Test;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

public class StreamMapUniqTest {
	@Test
	public void uniqTest() {
		List<Cat> catList = new ArrayList<>();
		catList.add(new Cat(1, "cat1"));
		catList.add(new Cat(2, "cat2"));
		catList.add(new Cat(3, "cat2"));

		Map<String, Cat> catMap2 = catList.stream().collect(Collectors.toMap(Cat::getName, val -> val));
		Assert.assertTrue(catMap2.size() == 2);
	}

	@Getter
	@Setter
	@AllArgsCons
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值