jdk8中List、map、set间转换(含转Map分组),以及List去重

10 篇文章 0 订阅
3 篇文章 0 订阅

一、List、Map、Set间转换(含转Map分组)

// List<Org> 转成 Set<Org>集合
Set<Org> orgSet = orgList.stream().collect(Collectors.toSet());
// List<String> 转成 Set<String>集合
Set<String> orgIdSet = orgList.stream().map(Org::getOrgId).collect(Collectors.toSet());

/**
 * List -> Map
 * 需要注意的是:
 * (1)toMap 如果集合对象有重复的key,会报错Duplicate key ....(比如user1,user2的id都为1)。
 *      可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
 */
Map<String, Org> orgMap = orgList.stream().collect(Collectors.toMap(Org::getOrgId, a -> a,(k1,k2)->k1));

//两个属性组合作为key
Map<String, Org> orgMap = organinfo.stream().collect(Collectors.toMap(k->k.getOrgId()+k.getOrgName(), k.getOrgName()));

// List转成Map分组,并根据student中的name属性进行分组
Map<String,List<Org>> group = orgList.stream().collect(Collectors.groupingBy(Student::getName));

// 使用Stream API进行分组求和
Map<String, Integer> groupSum = libraryList.stream()
	.collect(Collectors.groupingBy(
		lib -> lib.getType() + "",             // 分组的键
		Collectors.summingInt(                     // 分组的 downstream
			lib -> 1                             // 要统计的数量
		)
	));


二、List去重

// List<Org> orgList = new ArrayList<>();
// Org实体内可自定义的equals和hash算法
List<Org> list = orgList.stream().distinct().collect(Collectors.toList());

Set<Org> orgSet = orgList.stream().collect(Collectors.toSet());

三、最值

List<Org> orgList = new ArrayList<>();
orgList.add(new Org("1","张三"));
orgList.add(new Org("2","李四"));
orgList.add(new Org("0","李四"));
orgList.add(new Org("20","李四"));

//最小: 0
String minVal = orgList.stream().map(Org::getOrgId).min(String::compareTo).get();
//最大: 20
String maxval = orgList.stream().map(Org::getOrgId).max(String::compareTo).get();

四、List<对象> 转List<Integer>方法

// 方法一:
List ids = userList.stream().map(User::getId).collect(Collectors.toList());
// 方法二:
List ids = users.stream().map(e -> e.getId()).collect(Collectors.toList());

五、找出List中的重复元素(注:针对T,需要在T中重写equals方法)

/**
 * 找出List中的重复元素(注:针对T,需要在T中重写equals方法)
 * @param list
 * @return 重复的元素集合
 */
public static <T> List<T> findDuplicateElements(List<T> list) {
	Set<T> set = new HashSet<>();
	Set<T> duplicateSet = new HashSet<>();

	for (T element : list) {
		if (!set.add(element)) {
			duplicateSet.add(element);
		}
	}
	return new ArrayList<>(duplicateSet);
}

以下为重写equals方法参考:

	@Override
	public boolean equals(Object o) {
		if (this == o) {
			return true;
		}
		if (o == null || getClass() != o.getClass()) {
			return false;
		}
		if (!super.equals(o)) {
			return false;
		}
		DwhQualityRuleRelEntity that = (DwhQualityRuleRelEntity) o;
		return qualityModeId.equals(that.qualityModeId) &&
			rulesType.equals(that.rulesType) &&
			rulesId.equals(that.rulesId);
	}

	@Override
	public int hashCode() {
		return Objects.hash(super.hashCode(), qualityModeId, rulesType, rulesId);
	}

五、List<String>List<Integer>

List<Integer> integerList =stringList.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值