返回顶部
首页 > 资讯 > 精选 >jdk8中怎么使用stream实现对象属性的合并
  • 230
分享到

jdk8中怎么使用stream实现对象属性的合并

2023-06-26 06:06:50 230人浏览 八月长安
摘要

这篇“jdk8中怎么使用stream实现对象属性的合并”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jdk8中怎么使用str

这篇“jdk8中怎么使用stream实现对象属性的合并”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jdk8中怎么使用stream实现对象属性的合并”文章吧。

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>, 并将userId 相同的所有属性合并到一个map中

list1中对象的属性:userId、userName
list2中对象的属性:userId、gender、age
最总集合中对象的属性:userId、userName、gender、age

import java.util.*;import java.util.stream.Collectors;public class ListTest {    public static void main(String[] args) {        mergeList();    }        public static List<Map<String,Object>> mergeList(){        //构建List集合1        List<Map<String,Object>> list1 = new ArrayList<>();        Map<String,Object> data=new HashMap<>();        data.put("userId","100001");        data.put("userName","唐僧");        list1.add(data);        data=new HashMap<>();        data.put("userId","100002");        data.put("userName","八戒");        list1.add(data);        data=new HashMap<>();        data.put("userId","100003");        data.put("userName","悟空");        list1.add(data);        data=new HashMap<>();        data.put("userId","100004");        data.put("userName","沙僧");        list1.add(data); //构建List集合2        List<Map<String,Object>> list2 = new ArrayList<>();        data=new HashMap<>();        data.put("userId","100001");        data.put("gender","男");        data.put("age",20);        list2.add(data);        data=new HashMap<>();        data.put("userId","100002");        data.put("gender","雄");        data.put("age",1000);        list2.add(data);        data=new HashMap<>();        data.put("userId","100003");        data.put("gender","雄");        data.put("age",600);        list2.add(data);        data=new HashMap<>();        data.put("userId","100004");        data.put("gender","男");        data.put("age",800);        list2.add(data);//使用stream流把list1和list2根据属性userId合并一个list集合        List<Map<String, Object>> list = list1.stream().map(m -> {            list2.stream().filter(m2-> Objects.equals(m.get("userId"),m2.get("userId"))).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.println(map.toString());        }        return list;    }}

合并运行结果:

jdk8中怎么使用stream实现对象属性的合并

示例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;public class ListTest1 {    public static void main(String[] args) {        mergeList();    }        public static List<Ticket> mergeList(){   //构建List集合1        List<Ticket> list1 = new ArrayList<>();        Ticket data=new Ticket();        data.setTicketId("100001");        data.setTicketName("唐僧");        list1.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setTicketName("八戒");        list1.add(data);        data=new Ticket();        data.setTicketId("100003");        data.setTicketName("悟空");        list1.add(data);        data=new Ticket();        data.setTicketId("100004");        data.setTicketName("沙僧");        list1.add(data);//构建List集合2        List<Ticket> list2 = new ArrayList<>();        data=new Ticket();        data.setTicketId("100001");        data.setSaleNum("20");        data.setBatchAvailableNum("10");        list2.add(data);        data=new Ticket();        data.setTicketId("100001");        data.setSaleNum("20");        data.setBatchAvailableNum("10");        list2.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setSaleNum("1000");        data.setBatchAvailableNum("600");        list2.add(data);        data=new Ticket();        data.setTicketId("100003");        data.setSaleNum("600");        data.setBatchAvailableNum("100");        list2.add(data);        data=new Ticket();        data.setTicketId("100004");        data.setSaleNum("800");        data.setBatchAvailableNum("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.setSaleNum(m2.getSaleNum());                m.setBatchAvailableNum(m2.getBatchAvailableNum());            });            return m;        }).collect(Collectors.toList());        for(Ticket ticket:list){            System.out.println(ticket.getTicketId()+","+ticket.getTicketName()+","+ticket.getSaleNum()+","+ticket.getBatchAvailableNum());        }        return list;    }}

合并运行结果:

jdk8中怎么使用stream实现对象属性的合并

示例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;public class ListTest2 {    public static void main(String[] args) {        mergeList();    }        public static List<Ticket> mergeList(){        List<Ticket> list1 = new ArrayList<>();        Ticket data=new Ticket();        data.setTicketId("100001");        data.setTicketName("唐僧");        list1.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setTicketName("八戒");        list1.add(data);        List<Ticket> list2 = new ArrayList<>();        data=new Ticket();        data.setTicketId("100001");        data.setBatchId("1");        list2.add(data);        data=new Ticket();        data.setTicketId("100001");        data.setBatchId("2");        list2.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setBatchId("1");        list2.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setBatchId("2");        list2.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setBatchId("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.setTicketId(m2.getTicketId());                m.setTicketName(m2.getTicketName());            });            return m;        }).collect(Collectors.toList());        for(Ticket ticket:list){            System.out.println(ticket.getTicketId()+","+ticket.getTicketName()+","+ticket.getBatchId());        }        return list;    }}

合并运行结果:

jdk8中怎么使用stream实现对象属性的合并

示例4: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

想要的结果: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;public class ListTest3 {    public static void main(String[] args) {        mergeList();    }        public static List<Ticket> mergeList(){        List<Ticket> list1 = new ArrayList<>();        Ticket data=new Ticket();        data.setTicketId("100001");        data.setTicketName("唐僧");        list1.add(data);        data=new Ticket();        data.setTicketId("100002");        data.setTicketName("八戒");        list1.add(data);        List<Ticket> list2 = new ArrayList<>();        data=new Ticket();        data.setTicketId("100001");        data.setBatchId("1");        list2.add(data);        data=new Ticket();        data.setTicketId("100001");        data.setBatchId("2");        list2.add(data);//        data=new Ticket();//        data.setTicketId("100002");//        data.setBatchId("1");//        list2.add(data);////        data=new Ticket();//        data.setTicketId("100002");//        data.setBatchId("2");//        list2.add(data);////        data=new Ticket();//        data.setTicketId("100002");//        data.setBatchId("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.setTicketId(m2.getTicketId());                m.setTicketName(m2.getTicketName());            });            return m;        }).collect(Collectors.toList());        for(Ticket ticket:list){            System.out.println(ticket.getTicketId()+","+ticket.getTicketName()+","+ticket.getBatchId());        }        return list;    }}

合并运行结果:

jdk8中怎么使用stream实现对象属性的合并

以上就是关于“jdk8中怎么使用stream实现对象属性的合并”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: jdk8中怎么使用stream实现对象属性的合并

本文链接: https://lsjlt.com/news/307291.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • jdk8中怎么使用stream实现对象属性的合并
    这篇“jdk8中怎么使用stream实现对象属性的合并”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jdk8中怎么使用str...
    99+
    2023-06-26
  • jdk8使用stream实现两个list集合合并成一个(对象属性的合并)
    目录一、前言二、示例示例1:java8 合并两个 list<map>示例2:java8 合并两个 list<T>示例3:java8 合并两个 list<T>,集合个数前者小于后者,要...
    99+
    2024-04-02
  • 怎么使用JS动态合并两个对象的属性
    这篇文章给大家分享的是有关怎么使用JS动态合并两个对象的属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们可以使用扩展操作符(...)将不同的对象合并为一个对象,这也是合并两...
    99+
    2024-04-02
  • Java中使用stream流进行List对象的特定属性合并另一属性(包括单个属性以及两个属性的合并求和以及没有属性的合并求和)
    声明:代码段仅用来表达含义,如有不标准的地方请见谅。 首先建立一个测试类: @Data@AllArgsConstructor@NoArgsConstructorpublic class Person { //id private...
    99+
    2023-09-02
    java 开发语言
  • 怎么使用es6合并对象
    这篇文章给大家分享的是有关怎么使用es6合并对象的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。合并对象在JavaScript中合并多个对象的需求一直存在, 比如在传参时需要把表单...
    99+
    2024-04-02
  • javascript中如何动态合并两个对象的属性
    小编给大家分享一下javascript中如何动态合并两个对象的属性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们可以使用扩展操作符(...)将不同的对象合并为...
    99+
    2023-06-15
  • 使用Stream流筛选出List集合中符合条件的实体对象
    使用stream流筛选出List集合中符合条件的实体对象 注意:使用findFirst()方法返回的是符合条件的第一个元素,使用findAny()方法在多线程并发访问下是符合条件的任意元素 示例: p...
    99+
    2023-08-31
    java jvm 开发语言
  • VB.NET中Process的属性与对象怎么用
    这篇文章主要介绍VB.NET中Process的属性与对象怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!你再也不需要使用Win32应用编程接口或者VB的Shell函数来启动外部应用程序了。因为你可以使用.NET框...
    99+
    2023-06-17
  • ASP.NET中HttpContext对象下的属性怎么用
    这篇文章主要讲解了“ASP.NET中HttpContext对象下的属性怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET中HttpContext对象下的属性怎么用”吧!一、H...
    99+
    2023-06-30
  • Vue3中怎么使用watch监听对象的属性值
    这篇文章主要介绍“Vue3中怎么使用watch监听对象的属性值”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3中怎么使用watch监听对象的属性值”文章能帮助大家解决问题。Vue3 中使用 w...
    99+
    2023-07-04
  • es6对象增加新的属性怎么使用
    今天小编给大家分享一下es6对象增加新的属性怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。es6对象增加新的属性是“...
    99+
    2023-07-04
  • 怎么在JavaScript中使用es6语法合并对象
    这期内容当中小编将会给大家带来有关怎么在JavaScript中使用es6语法合并对象,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解...
    99+
    2023-06-14
  • java对象动态增加属性怎么实现
    在Java中,对象的属性通常是在编译时确定的,无法在运行时动态地增加属性。然而,可以通过使用Java的反射机制来实现动态增加属性的效...
    99+
    2023-10-12
    java
  • CSS中怎么使用relative属性实现相对定位
    这期内容当中小编将会给大家带来有关CSS中怎么使用relative属性实现相对定位,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。CSS relative相对定位设置为相对...
    99+
    2024-04-02
  • java怎么使用stream判断两个list元素的属性并输出
    今天小编给大家分享一下java怎么使用stream判断两个list元素的属性并输出的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-02
  • 如何使用JS基于对象实现合并功能
    这篇文章给大家分享的是有关如何使用JS基于对象实现合并功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。浅拷贝的方式实现对象合并之前的一篇博文 有专门介绍对象和数组的深浅拷贝,不...
    99+
    2024-04-02
  • java反射给对象属性赋值怎么实现
    Java反射可以通过`java.lang.reflect.Field`类来给对象的属性赋值。以下是一个示例代码: import ja...
    99+
    2023-10-27
    java
  • java8实现List中对象属性的去重方法
    java8的stream流能完美解对象集合去重问题. List<UserCar> list1 = new ArrayList(); UserCar userCa...
    99+
    2024-04-02
  • html5中返回AudioTrackList对象的属性audioTracks怎么用
    小编给大家分享一下html5中返回AudioTrackList对象的属性audioTracks怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!实例获得可用音轨的数量:myVid=doc...
    99+
    2024-04-02
  • html5中返回TimeRanges对象的属性buffered怎么用
    小编给大家分享一下html5中返回TimeRanges对象的属性buffered怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!实例获得视频的第一段缓冲范围(部分),以秒计:myVid...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作