最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jdk8使用stream實(shí)現(xiàn)兩個(gè)list集合合并成一個(gè)(對(duì)象屬性的合并)

 更新時(shí)間:2022年01月17日 15:24:43   作者:12程序猿  
本文主要介紹了jdk8使用stream實(shí)現(xiàn)兩個(gè)list集合合并成一個(gè)(對(duì)象屬性的合并),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

java使用stream實(shí)現(xiàn)list中對(duì)象屬性的合并:根據(jù)兩個(gè)List中的某個(gè)相同字段合并成一條List,包含兩個(gè)List中的字段

一、前言

為什么要用Lambda表達(dá)式Stream流做集合的處理? 因?yàn)樾矢?、代碼簡(jiǎn)潔、高端大氣上檔次!

(1)描述:比如一個(gè)List集合中List<對(duì)象1>,該對(duì)象1包含A、B和C列;另外一個(gè)List集合中List<對(duì)象2>,該對(duì)象2包含A、D列;

(2)問(wèn)題:需要將兩個(gè)List合成List<對(duì)象3>返回,該對(duì)象3包含A、B、C、D列

(3)實(shí)現(xiàn):使用stream實(shí)現(xiàn)兩個(gè)list集合合并成一個(gè)list集合

簡(jiǎn)要說(shuō)明:filter的使用方式為: filter(item -> item的邏輯判斷 ) ,其中filter會(huì)保留判斷條件為true的記錄

二、示例

示例1:java8 合并兩個(gè) list<map>

java8 合并兩個(gè) list<map>, 并將userId 相同的所有屬性合并到一個(gè)map中

list1中對(duì)象的屬性:userId、userName
list2中對(duì)象的屬性:userId、gender、age
最總集合中對(duì)象的屬性:userId、userName、gender、age

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author qzz
 */
public class ListTest {

    public static void main(String[] args) {
        mergeList();
    }
    /**
     * @Description: 合并兩個(gè)list<map>,并將userId相同的其它屬性合并
     * @Title: mergeList
     * @param: @return
     * @return: List<Map<String,Object>>
     * @throws
     */
    public static List<Map<String,Object>> mergeList(){
        //構(gòu)建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);

 		//構(gòu)建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根據(jù)屬性u(píng)serId合并一個(gè)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;
    }
}

合并運(yùn)行結(jié)果:

在這里插入圖片描述

示例2:java8 合并兩個(gè) list<T>

java8 合并兩個(gè) list<T>, 并將tickeId相同的所有屬性合并到一個(gè)T中

list1中對(duì)象的屬性:ticketId、ticketName
list2中對(duì)象的屬性:ticketId、saleNum、batchAvailableNum
最總集合中對(duì)象的屬性: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: 合并兩個(gè)list<Ticket>,并將ticketId相同的其它屬性合并
     * @Title: mergeList
     * @param: @return
     * @return: List<Ticket>
     * @throws
     */
    public static List<Ticket> mergeList(){
   		//構(gòu)建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);

		//構(gòu)建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根據(jù)屬性ticketId合并一個(gè)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;
    }
}

合并運(yùn)行結(jié)果:

在這里插入圖片描述

示例3:java8 合并兩個(gè) list<T>,集合個(gè)數(shù)前者小于后者,要后者

list1中對(duì)象的屬性:ticketId、ticketName
list2中對(duì)象的屬性:ticketId、batchId
最總集合中對(duì)象的屬性: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
想要的結(jié)果: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

代碼實(shí)現(xiàn):

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: 合并兩個(gè)list<map>,并將userId相同的其它屬性合并
     * @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.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集合中,根據(jù)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;
    }
}

合并運(yùn)行結(jié)果:

在這里插入圖片描述

示例4:java8 合并兩個(gè) list<T>,集合個(gè)數(shù)前者大于后者,要后者

list1中對(duì)象的屬性:ticketId、ticketName
list2中對(duì)象的屬性:ticketId、batchId
最總集合中對(duì)象的屬性:ticketId、ticketName、batchId
list1:
ticketId:10001 , ticketName:唐僧
ticketId:10002 , ticketName:八戒
list2:
ticketId:10001 , batchId:1
ticketId:10001 , batchId:2

想要的結(jié)果:list1合并到 list 2,過(guò)濾掉batch不存在的數(shù)據(jù)
ticketId:10001 , ticketName:唐僧,batchId:1
ticketId:10001 , ticketName:唐僧,batchId:2

代碼實(shí)現(xiàn):

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: 合并兩個(gè)list<map>,并將userId相同的其它屬性合并
     * @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.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集合中,根據(jù)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;
    }
}

合并運(yùn)行結(jié)果:

在這里插入圖片描述

 到此這篇關(guān)于jdk8使用stream實(shí)現(xiàn)兩個(gè)list集合合并成一個(gè)(對(duì)象屬性的合并)的文章就介紹到這了,更多相關(guān)jdk8 stream list集合合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

安宁市| 淮北市| 公主岭市| 五指山市| 南通市| 岳西县| 清涧县| 军事| 辽宁省| 崇信县| 铜山县| 涿州市| 横峰县| 当阳市| 阿荣旗| 宜章县| 中江县| 伊春市| 澎湖县| 铁力市| 玛沁县| 竹北市| 太白县| 江油市| 九江县| 廉江市| 佳木斯市| 梅河口市| 全州县| 永安市| 彭山县| 凭祥市| 广东省| 凤庆县| 且末县| 田阳县| 和政县| 万山特区| 若尔盖县| 荣成市| 江达县|