首页 > 作文

jdk8使用stream实现两个list集合合并成一个(对象属性的合并)

更新时间:2023-04-04 15:51:34 阅读: 评论:0

目录
一、前言二、示例示例1:java8 合并两个 list<map>示例2:java8 合并两个 list<t>示例3:java8 合并两个 list<t>,集合个数前者小于后者,要后者示例4:java8 合并两个 list<t>,集合个数前者大于后者,要后者

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的记录

二、示例

示例1:java8 合并两个 list<map>

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;    }}

合并运行结果:

示例2:java8 合并两个 list<t>

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;    }}

合并运行结果:

示例3:java8 合并两个 list<t>,集合个数前者小于后者,要后者

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;    }}

合并运行结果:

示例4:java8 合并两个 list<t>,集合个数前者大于后者,要后者

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图