本文主要介绍了jdk8使用溪流实现两个目录集合合并成一个(对象属性的合并),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
目录
一、前言二、示例示例1:java8合并两个列表<地图>示例2:java8合并两个列表
一、前言
为什么要用希腊字母的第11个表达式和溪流流做集合的处理?因为效率高、代码简洁、高端大气上档次!
(1)描述:比如一个目录集合中目录对象1,该对象一包含甲、乙和C列;另外一个目录集合中目录对象2,该对象2包含a、D列;
(2)问题:需要将两个目录合成目录对象3返回,该对象3包含甲、乙、丙、丁列
(3)实现:使用溪流实现两个目录集合合并成一个目录集合
简要说明:filter的使用方式为: filter(item - item的逻辑判断 ) ,其中filter会保留判断条件为true的记录
二、示例
示例1:java8 合并两个 listmap
java8 合并两个 listmap, 并将userId 相同的所有属性合并到一个map中
列表一中对象的属性:用户身份证,用户名
列表2中对象的属性:用户身份证,性别、年龄
最总集合中对象的属性:用户身份证,用户名、性别、年龄
导入Java。util。*;
导入Java。util。溪流。收藏家;
/**
* @作者qzz
*/
公共类列表测试{
公共静态void main(String[] args) {
合并列表();
}
/**
* @描述:合并两个列表地图,并将使用者辩证码相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: ListMapString,Object
* @次投掷
*/
public static ListMapString,Object mergeList(){
//构建目录集合一
ListMapString,Object list 1=new ArrayList();
MapString,Object data=new HashMap();
data.put('userId ',' 100001 ');
data.put('用户名','唐僧');
list1.add(数据);
data=new HashMap();
data.put('userId ',' 100002 ');
data.put('用户名','八戒');
list1.add(数据);
data=new HashMap();
data.put('userId ',' 100003 ');
data.put('用户名','悟空');
list1.add(数据);
data=new HashMap();
data.put('userId ',' 100004 ');
data.put('用户名','沙僧');
list1.add(数据);
//构建目录集合2
ListMapString,Object list 2=new ArrayList();
data=new HashMap();
data.put('userId ',' 100001 ');
data.put('性别','男');
data.put('年龄',20);
list2.add(数据);
data=new HashMap();
data.put('userId ',' 100002 ');
data.put('性别','雄');
data.put('年龄',1000);
list2.add(数据);
data=new HashMap();
data.put('userId ',' 100003 ');
data.put('性别','雄');
data.put('年龄',600);
list2.add(数据);
data=new HashMap();
data.put('userId ',' 100004 ');
data.put('性别','男');
data.put('年龄',800);
list2.add(数据);
//使用溪流流把列表一和列表2根据属性使用者辩证码合并一个目录集合
ListMapString,Object list=list1.stream().地图(m - {
list2.stream().过滤器(m2-对象。equals(m . get(' userId ')、m2.get('userId ').forEach(m2- {
' m.put('性别,m2.get('性别'));
' m.put('年龄),m2.get('年龄');
});
返回m;
}).收藏(收藏者。to list());
对于(映射字符串,对象映射:列表){
系统。出去。println(地图。tostring());
}
退货单;
}
}
合并运行结果:
示例2:java8 合并两个 listT
java8 合并两个 listT, 并将tickeId相同的所有属性合并到一个T中
列表一中对象的属性:ticketId、ticketName
列表2中对象的属性:ticketId、saleNum、batchAvailableNum
最总集合中对象的属性:ticketId、ticketName、saleNum、batchAvailableNum
导入Java。util。*;
导入Java。util。溪流。收藏家;
/**
* @作者qzz
*/
公共类列表测试1 {
公共静态void main(String[] args) {
合并列表();
}
/**
* @描述:合并两个listTicket,并将ticketId相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: ListTicket
* @次投掷
*/
公共静态ListTicket mergeList(){
//构建目录集合一
list ticket list 1=new ArrayList();
车票数据=新车票();
数据。setticketid(' 100001 ');
data.setTicketName('唐僧');
list1.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
data.setTicketName('八戒');
list1.add(数据);
data=new Ticket();
数据。setticketid(' 100003 ');
data.setTicketName('悟空');
list1.add(数据);
data=new Ticket();
数据。setticketid(' 100004 ');
data.setTicketName('沙僧');
list1.add(数据);
//构建目录集合2
list ticket list 2=new ArrayList();
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setsalenum(' 20 ');
数据。setbatchavailablenum(" 10 ");
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setsalenum(' 20 ');
数据。setbatchavailablenum(" 10 ");
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
数据。setsalenum(' 1000 ');
数据。setbatchavailablenum(' 600 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100003 ');
数据。setsalenum(' 600 ');
数据。setbatchavailablenum(' 100 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100004 ');
数据。setsalenum(' 800 ');
数据。setbatchavailablenum(' 300 ');
list2.add(数据);
//使用溪流流把列表一和列表2根据属性ticketId合并一个目录集合
ListTicket list=list1.stream().地图(m - {
list2.stream().过滤器(m2-对象。equals(m . getticketid(),m2.getTicketId()).forEach(m2- {
m。setsalenum(m2。getsalenum());
m。setbatchavailablenum(m2。getbatchavailablenum());
});
返回m;
}).收藏(收藏者。to list());
for(Ticket ticket:list){
系统。出去。println(票。' getticketid()',' ticket.getTicketName()',' ticket.getSaleNum()',' ticket。getbatchavailablenum());
}
退货单;
}
}
合并运行结果:
示例3:java8 合并两个 listT,集合个数前者小于后者,要后者
列表一中对象的属性:ticketId、ticketName
列表2中对象的属性:ticketId、batchId
最总集合中对象的属性:ticketId、ticketName、batchId
列表1:
ticketId:10001,ticketName:唐僧
ticketId:10002,ticketName:八戒
列表2:
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
代码实现:
导入Java。util。ArrayList
导入Java。util。列表;
导入Java。util。对象;
导入Java。util。溪流。收藏家;
/**
* @作者qzz
*/
公共类列表测试2 {
公共静态void main(String[] args) {
合并列表();
}
/**
* @描述:合并两个列表地图,并将使用者辩证码相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: ListMapString,Object
* @次投掷
*/
公共静态ListTicket mergeList(){
list ticket list 1=new ArrayList();
车票数据=新车票();
数据。setticketid(' 100001 ');
data.setTicketName('唐僧');
list1.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
data.setTicketName('八戒');
list1.add(数据);
list ticket list 2=new ArrayList();
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setbatchid(' 1 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setbatchid(' 2 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
数据。setbatchid(' 1 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
数据。setbatchid(' 2 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
数据。setbatchid(' 3 ');
list2.add(数据);
//使用溪流流把列表一合并到列表2集合中,根据ticketId属性
ListTicket list=list2.stream().地图(m - {
list1.stream().过滤器(m2-对象。equals(m . getticketid(),m2.getTicketId()).forEach(m2- {
m。setticketid(m2。getticketid());
m。setticket名称(m2。getticket name());
});
返回m;
}).收藏(收藏者。to list());
for(Ticket ticket:list){
系统。出去。println(票。getticketid()',' ticket.getTicketName()',' ticket。getbatchid());
}
退货单;
}
}
合并运行结果:
示例4:java8 合并两个 listT,集合个数前者大于后者,要后者
列表一中对象的属性:ticketId、ticketName
列表2中对象的属性:ticketId、batchId
最总集合中对象的属性:ticketId、ticketName、batchId
列表1:
ticketId:10001,ticketName:唐僧
ticketId:10002,ticketName:八戒
列表2:
ticketId:10001,batchId:1
ticketId:10001,batchId:2
想要的结果:list1合并到 list 2,过滤掉batch不存在的数据
ticketId:10001,ticketName:唐僧,batchId:1
ticketId:10001,ticketName:唐僧,batchId:2
代码实现:
导入Java。util。ArrayList
导入Java。util。列表;
导入Java。util。对象;
导入Java。util。溪流。收藏家;
/**
* @作者qzz
*/
公共类列表3 {
公共静态void main(String[] args) {
合并列表();
}
/**
* @描述:合并两个列表地图,并将使用者辩证码相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: ListMapString,Object
* @次投掷
*/
公共静态ListTicket mergeList(){
list ticket list 1=new ArrayList();
车票数据=新车票();
数据。setticketid(' 100001 ');
data.setTicketName('唐僧');
list1.add(数据);
data=new Ticket();
数据。setticketid(' 100002 ');
data.setTicketName('八戒');
list1.add(数据);
list ticket list 2=new ArrayList();
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setbatchid(' 1 ');
list2.add(数据);
data=new Ticket();
数据。setticketid(' 100001 ');
数据。setbatchid(' 2 ');
list2.add(数据);
//data=new Ticket();
//数据。setticketid(' 100002 ');
//数据。setbatchid(' 1 ');
//list2.add(数据);
//
//data=new Ticket();
//数据。setticketid(' 100002 ');
//数据。setbatchid(' 2 ');
//list2.add(数据);
//
//data=new Ticket();
//数据。setticketid(' 100002 ');
//数据。setbatchid(' 3 ');
//list2.add(数据);
//使用溪流流把列表一合并到列表2集合中,根据ticketId属性
ListTicket list=list2.stream().地图(m - {
list1.stream().过滤器(m2-对象。equals(m . getticketid(),m2.getTicketId()).forEach(m2- {
m。setticketid(m2。getticketid());
m。setticket名称(m2。getticket name());
});
返回m;
}).收藏(收藏者。to list());
for(Ticket ticket:list){
系统。出去。println(票。getticketid()',' ticket.getTicketName()',' ticket。getbatchid());
}
退货单;
}
}
合并运行结果:
到此这篇关于jdk8使用溪流实现两个目录集合合并成一个(对象属性的合并)的文章就介绍到这了,更多相关jdk8流列表集合合并内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。