Java8两个list集合合并成一个list集合

为什么要用Lambda表达式和Stream流做集合的处理? 因为效率高、代码简洁、高端大气上档次啊!


ES6


1、将一个集合中每一个对象的某个元素取出来作为一个新的集合

var newList = oldList.map(item => item.element)

2、将数组已指定的字符串分割后,拼接成一个字符串

var str = arr.join(",")

Java


现在有以下一个场景:需要将集合	
	A{"id": "12345","name": "zhangsan"}
	B{"id": "12345", "age": 23}
		合并成一个新的集合
	C{"id": "12345","name": "zhangsan", "age": 23}
	1、将listA集合转换为map
	 Map<String, Person> map = listA.stream().collect
                (Collectors.toMap(Person ::getId, Person -> Person))
       
    2、合并数据,这里将listA集合的数据合并到listB集合上
	listB.forEach(n -> {
         if(map.containsKey(n.getId())){
         Person person = map.get(n.getId());
         n.setName(person.getName());
         }
     });

这里经过第二步处理好的listB就已经是我们想要的listA啦!

	3、如果主键重复了,还可以使用以下方式去重
	Map<String, Person> person = listB.stream()
                .collect(Collectors.toMap(Person::getId, Function.identity(), (key1, key2) -> key2));

==============================================================================

其余干货

	1、一个集合根据主键msisdn去重,得到一个新的集合
 	List<Card> newList = list.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() ->new TreeSet<>(Comparator.comparing(Card::getMsisdn))), 
                ArrayList::new));
	2、获取一个集合中,某个对象指定属性的集合
  	List<Long> msisdnList = kqCardList.stream().map(KqCard::getMsisdn).collect(Collectors.toList());
  	3、将一个long类型的集合转换为String类型的集合
	 List<String> msisdnStrList = msisdnList.stream().map(String::valueOf).collect(Collectors.toList());
	4、遍历一个集合中,对每个对象的指定属性进行赋值(这里我对每个对象赋值了三个参数,最后一个是使用UUID做主键)
	List<CmiDataAmount> cmiDataAmountList = cmiDataAmountList.stream().map(
		cmiDataAmount ->{cmiDataAmount.setCreateTime(createTime);
    	cmiDataAmount.setCurrentMonth(currentMonth);
        cmiDataAmount.setId(UUID.randomUUID().toString());
        }).collect(Collectors.toList());
	5、将String类型的字符串(比如用“,”分割)转换为集合
	List<String> msisdnsList = Arrays.asList(msisdns.split(",")).stream().
	map(s -> String.format(s.trim())).collect(Collectors.toList());
	6、遍历集合,获取类型为A的元素,并放入新集合
	List<CmiDataAmount> list = cmiDataAmountList.stream().
	filter(item -> item.getType().equals("A")).
	collect(Collectors.toList());
	7、取list集合中的两个元素,转换为一个map
	Map<Integer, String> collect = list.stream().
	collect(Collectors.toMap(Student::getAge, Student::getName));
	8、如何将一个元素(对象、属性等)优雅的转换为一个集合
	List<K> authcChannels = Stream.of(K).collect(Collectors.toList());
	9、获取list中name=bbb的对象
    People bbb = list.stream().filter(item -> item.getName().equals("bbb")).findFirst().get();

	10、stream根据list中某字段进行排序(正序)
	List<Integer> newList = list.stream().sorted().collect(Collectors.toList());
	11、stream根据list中某字段进行排序(倒序)
	List<Integer> newList = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

分享完毕!拜拜!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值