java使用stream实现list中对象属性的合并:根据两个list中的某个相同字段合并成一条list,包含两个list中的字段
为什么要用lambda表达式
和stream流
做集合的处理? 因为效率高、代码简洁、高端大气上档次!
(1)描述:比如一个list集合中list<对象1>,该对象1包含a、b和c列;另外一个list集合中list<对象2>,该对象2包含a、d列;
(2)问题:需要将两个list合成list<对象3>返回,该对象3包含a、b、c、d列
(3)实现:使用stream实现两个list集合合并成一个list集合
简要说明:filter的使用方式为: filter(item -> item的逻辑判断 ) ,其中filter会保留判断条件为true的记录
java8 合并两个 list<map>, 并将urid 相同的所有属性合并到一个map中
list1中对象的属性:urid、urname
list2中对象的属性:urid、gender、age
最总集合中对象的属性:urid、urname、gender、age
import java.util.*;import java.util.stream.collectors;/** * @author qzz */public class listtest { public static void main(string[] args) { mergelist(); } /** * @description: 合并两个list<map>,并将urid相同的其它属性合并 * @title: mergelist * @param: @return * @return: list<map<string,object>> * @throws */ public static list<map<string,object>> mergelist(){ //构建list集合1 list<map<string,object>> list1 = new arraylist<>(); map<string,object> data=new hashmap<>(); data.put("urid","100001"); data.put("urname","唐僧"); list1.add(data); data=new hashmap<>(); data.put("urid","100002"); data.put("urname","八戒"); list1.add(data); data=new hashmap<>(); data.put("urid","100003"); data.put("urname","悟空"); list1.add(data); data=new hashmap<>在职考研的条件;(); data.put("urid","100004"); data.put("urname","沙僧"); list1.add(data); //构建list集合2 list<map<string,object>> list2 = new arraylist<>(); data=new hashmap<>(); data.put("urid","100001"); data.put("gender","男"); data.put("age",20); list2.add(data); data=new hashmap<>(); data.put("urid","100002"); data.put("gender","雄"); data.put("age",1000); list2.add(data); data=new hashmap<>(); data.put("urid","100003"); data.put("gender","雄"); data.put("age",600); list2.add(data); data=new hashmap<>(); data.put("urid","100004"); data.put("gender","男"); data.put("age",800); list2.add(data);//使用stream流把list1和list2根据属性urid合并一个list集合 list<map<郑州轻工业大学string, object>> list = list1.stream().map(m -> { list2.stream().filter(m2-> objects.equals(m.get("urid"),m2.get("urid"))).foreach(m2-> { m.put("gender",m2.get("gender")); m.put("age",m2.get("age")); }); return m; }).collect(collectors.tolist()); for(map<string, object> map:list){ system.out.pr腊梅花图片intln(map.tostring()); } return list; }}
合并运行结果:
java8 合并两个 list<t>, 并将tickeid相同的所有属性合并到一个t中
list1中对象的属性:ticketid、ticketname
list2中对象的属性:ticketid、salenum、batchavailablenum
最总集合中对象的属性:ticketid、ticketname、salenum、batchavailablenum
import java.util.*;import java.util.stream.collectors;/** * @author qzz */public class listtest1 { public static void main(string[] args) { mergelist(); } /** * @description: 合并两个list<ticket>,并将ticketid相同的其它属性合并 * @title: mergelist * @param: @return * @return: list<ticket> * @throws */ public static list<ticket> mergelist(){ //构建list集合1 list<ticket> list1 = new arraylist<>(); ticket data=new ticket(); data.tticketid("100001"); data.tticketname("唐僧"); list1.add(data); data=new ticket(); data.tticketid("100002"); data.tticketname("八戒"); list1.add(data); data=new ticket(); data.tticketid("100003"); data.tticketname("悟空"); list1.add(data); data=new ticket(); data.tticketid("100004"); data.tticketname("沙僧"); list1.add(data);//构建list集合2 list<ticket> list2 = new arraylist<>(); data=new ticket(); data.tticketid("100001"); data.tsalenum("20"); data.tbatchavailablenum("10"); list2.add(data); data=new ticket(); data.tticketid("100001"); data.tsalenum("20"); data.tbatchavailablenum("10"); list2.add(data); data=new ticket(); data.tticketid("100002"); data.tsalenum("1000"); data.tbatchavailablenum("600"); list2.add(data); data=new ticket(); data.tticketid("100003"); data.tsalenum("600"); data.tbatchavailablenum("100"); list2.add(data); data=new ticket(); data.tticketid("100004"); data.tsalenum("800"); data.tbatchavailablenum("300"); list2.add(data); //使用stream流把list1和list2根据属性ticketid合并一个list集合 list<ticket> list = list1.stream().map(m -> { list2.stream().filter(m2-> objects.equals(m.getticketid(),m2.getticketid())).foreach(m2-> { m.tsalenum(m2.getsalenum()); m.tbatchavailablenum(m2.getbatchavailablenum()); }); return m; }).collect(collectors.tolist()); for(ticket ticket:list){ system.out.println(ticket.getticketid()+","+ticket.getticketname()+","+ticket.getsalenum()+","+ticket.getbatchavailablenum()); } return list; }}
合并运行结果:
list1中对象的属性:ticketid、ticketname
list2中对象的属性:ticketid、batchid
最总集合中对象的属性:ticketid、ticketname、batchid
list1:
ticketid:10001 , ticketname:唐僧
ticketid:10002 , ticketname:八戒
list2:
ticketid:10001 , batchid:1
ticketid:10001 , batchid:2
ticketid:10002 , batchid:1
ticketid:10002 , batchid:2
ticketid:10003 , batchid:2
想要的结果:list1合并到 list 2
ticketid:10001 , ticketname:唐僧,batchid:1
ticketid:10001 , ticketname:唐僧,batchid:2
ticketid:10002 , ticketname:八戒,batchid:1
ticketid:10002 , ticketname:八戒,batchid:2
ticketid:10003 , ticketname:八戒,batchid:2
代码实现:
import java.util.arraylist;import java.util.list;import java.util.objects;import java.util.stream.collectors;/** * @author qzz */public class listtest2 { public static void main(string[] args) { mergelist(); } /** * @description: 合并两个list<map>,并将urid相同的其它属性合并 * @title: mergelist * @param: @return * @return: list<map<string,object>> * @throws */ public static list<ticket> mergelist(){ list<ticket> list1 = new arraylist<>(); ticket data=new ticket(); data.tticketid("100001"); data.tticketname("唐僧"); list1.add(data); data=new ticket(); data.tticketid("100002"); data.tticketname("八戒"); list1.add(data); list<ticket> list2 = new arraylist<>(); data=new ticket(); data.tticketid("100001"); data.tbatchid("1"); list2.add(data); data=new ticket(); data.tticketid("100001"); data.tbatchid("2"); list2.add(data); data=new ticket(); data.tticketid("100002"); data.tbatchid("1"); list2.add(data); data=new ticket(); data.tticketid("100002"); data.tbatchid("2"); list2.add(data); data=new ticket(); data.tticketid("100002"); data.tbatchid("3"); list2.add(data); //使用stream流把list1合并到list2集合中,根据ticketid属性 list<ticket> list = list2.stream().map(m -> { list1.stream().filter(m2-> objects.equals(m.getticketid()α,m2.getticketid())).foreach(m2-> { m.tticketid(m2.getticketid()); m.tticketname(m2.getticketname()); }); return m; }).collect(collectors.tolist()); for(ticket ticket:list){ system.out.println(ticket.getticketid()+","+ticket.getticketname()+","+ticket.getbatchid()); } return list; }}
合并运行结果:
list1中对象的属性:ticketid、ticketname
list2中对象的属性:ticketid、batchid
最总集合中对象的属性:ticketid、ticketname、batchid
list1:
ticketid:10001 , ticketname:唐僧
ticketid:10002 , ticketname:八戒
list2:
ticketid:1five的音标0001 , batchid:1
ticketid:10001 , batchid:2
想要的结果:list1合并到 list 2,过滤掉batch不存在的数据
ticketid:10001 , ticketname:唐僧,batchid:1
ticketid:10001 , ticketname:唐僧,batchid:2
代码实现:
import java.util.arraylist;import java.util.list;import java.util.objects;import java.util.stream.collectors;/** * @author qzz */public class listtest3 { public static void main(string[] args) { mergelist(); } /** * @description: 合并两个list<map>,并将urid相同的其它属性合并 * @title: mergelist * @param: @return * @return: list<map<string,object>> * @throws */ public static list<ticket> mergelist(){ list<ticket> list1 = new arraylist<>(); ticket data=new ticket(); data.tticketid("100001"); data.tticketname("唐僧"); list1.add(data); data=new ticket(); data.tticketid("100002"); data.tticketname("八戒"); list1.add(data); list<ticket> list2 = new arraylist<>(); data=new ticket(); data.tticketid("100001"); data.tbatchid("1"); list2.add(data); data=new ticket(); data.tticketid("100001"); data.tbatchid("2"); list2.add(data);// data=new ticket();// data.tticketid("100002");// data.tbatchid("1");// list2.add(data);//// data=new ticket();// data.tticketid("100002");// data.tbatchid("2");// list2.add(data);//// data=new ticket();// data.tticketid("100002");// data.tbatchid("3");// list2.add(data); //使用stream流把list1合并到list2集合中,根据ticketid属性 list<ticket> list = list2.stream().map(m -> { list1.stream().filter(m2-> objects.equals(m.getticketid(),m2.getticketid())).foreach(m2-> { m.tticketid(m2.getticketid()); m.tticketname(m2.getticketname()); }); return m; }).collect(collectors.tolist()); for(ticket ticket:list){ system.out.println(ticket.getticketid()+","+ticket.getticketname()+","+ticket.getbatchid()); } return list; }}
合并运行结果:
到此这篇关于jdk8使用stream实现两个list集合合并成一个(对象属性的合并)的文章就介绍到这了,更多相关jdk8 stream list集合合并内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 15:51:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/be329625d7c3329105bee6b7a9bcb5b9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:jdk8使用stream实现两个list集合合并成一个(对象属性的合并).doc
本文 PDF 下载地址:jdk8使用stream实现两个list集合合并成一个(对象属性的合并).pdf
留言与评论(共有 0 条评论) |