您好,登錄后才能下訂單哦!
這篇“jdk8中怎么使用stream實(shí)現(xiàn)對(duì)象屬性的合并”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“jdk8中怎么使用stream實(shí)現(xiàn)對(duì)象屬性的合并”文章吧。
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的記錄
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é)果:
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é)果:
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é)果:
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)對(duì)象屬性的合并”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。