国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8 Stream對兩個 List 遍歷匹配數據的優化處理操作

Java8 Stream對兩個 List 遍歷匹配數據的優化處理操作

2020-08-17 12:13yang名揚 Java教程

這篇文章主要介紹了Java8 Stream對兩個 List 遍歷匹配數據的優化處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用場景,有兩個List<Map<String,Object>>集合,第一個集合的所有元素都是需要保留的。

第一個集合的值為:

?
1
2
3
4
5
6
7
8
{name=張三豐1, id=1}
{name=張三豐2, id=2}
{name=張三豐3, id=3}
{name=張三豐4, id=4}
{name=張三豐5, id=5}
{name=張三豐6, id=6}
{name=張三豐7, id=7}
{name=張三豐8, id=8}

第二個集合的值為:

?
1
2
3
4
{grade=61, id=1}
{grade=62, id=2}
{grade=63, id=3}
{grade=64, id=4}

需要根據兩個集合中id值相同,就把第二個集合中的grade值賦給第一個集合,如果不匹配,默認grade值為0

結果是這樣:

?
1
2
3
4
5
6
7
8
{grade=61, name=張三豐1, id=1}
{grade=62, name=張三豐2, id=2}
{grade=63, name=張三豐3, id=3}
{grade=64, name=張三豐4, id=4}
{grade=0, name=張三豐5, id=5}
{grade=0, name=張三豐6, id=6}
{grade=0, name=張三豐7, id=7}
{grade=0, name=張三豐8, id=8}

具體實現代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  @Test
  public void demo01(){
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    for (int i=1;i<9;i++){
      Map<String,Object> map = new HashMap<>();
      map.put("id",i);
      map.put("name","張三豐"+i);
      list.add(map);
    }
    Stream<Map<String, Object>> s1 = list.stream();
    list.stream().forEach(map-> System.out.println(map));
 
    List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();
    for (int i=1;i<5;i++){
      Map<String,Object> map2 = new HashMap<>();
      map2.put("id",i);
      map2.put("grade",i+60);
      list2.add(map2);
    }
    list2.stream().forEach(s-> System.out.println(s));
/**
 * List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream()
 *         .filter(m -> Objects.equals(m.get("id"), map.get("id")))
 *         .findFirst().map(m -> {
 *           map.putAll(m);
 *           map.put("grade",90);
 *           return map;
 *         }).orElse(null))
      *         .filter(Objects::nonNull).collect(Collectors.toList());
 */
   /* List<Map<String, Object>> resultList2 = list.stream().map(m->{
          m.put("grade",0);
          for (int i=0;i<list2.size();i++){
            if(m.get("id").equals(list2.get(i).get("id"))){
              m.put("grade",list2.get(i).get("grade"));
              break;
            }
          }
          return m;
        }).collect(Collectors.toList());*/
    List<Map<String, Object>> resultList2 = list.stream().map(m->{
      m.put("grade",0);
      list2.stream().filter(m2->Objects.equals(m.get("id"), m2.get("id"))).forEach(s-> m.put("grade",s.get("grade")));
      return m;
    }).collect(Collectors.toList());
    resultList2.stream().forEach(s-> System.out.println(s));
  }

補充知識:Java-8新特性-通過Stream獲取兩個List復雜對象的交并差集

思路:首先獲取兩個list的id,通過id比較獲取id的交并差集,再通過一次獲取list對象里面的交并差集元素

代碼直接可運行,個人覺得java8的stream非常類似ES6的集合運算,filter、foreach、map、reduce基本可以一一對應

代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.stream;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 *
 * @ClassName: TwoListCopare
 * @Description: 兩個List<對象>取交集\并集\差集</>
 **/
public class TwoListCopare {
  public static void main(String[] args) {
    UserDTO userOld1 = new UserDTO("1","aaa",22);
    UserDTO userOld2 = new UserDTO("2","bbb",32);
    UserDTO userOld3 = new UserDTO("3","ccc",11);
    UserDTO userOld4 = new UserDTO("4","ddd",42);
    UserDTO userOld5 = new UserDTO("5","bbb",22);
    UserDTO userOld6 = new UserDTO("6","eee",24);
 
    UserDTO userNew1 = new UserDTO("7","dada",22);   //新增一個
    UserDTO userNew2 = new UserDTO("2","bbb",32);   //不變一個
    UserDTO userNew3 = new UserDTO("3","kaka",33);   //更新一個
    UserDTO userNew4 = new UserDTO("8","dbdb",42);   //新增一個
    UserDTO userNew5 = new UserDTO("5","bbb",100);   //更新一個
    //當然,少了1,4,6
 
    List<UserDTO> mapAdd = new ArrayList<>();
 
    List<UserDTO> oldList = new ArrayList<>();
    List<UserDTO> newList = new ArrayList<>();
 
    //添加老數據
    oldList.add(userOld1);
    oldList.add(userOld2);
    oldList.add(userOld3);
    oldList.add(userOld4);
    oldList.add(userOld5);
    oldList.add(userOld6);
    //添加新數據
    newList.add(userNew1);
    newList.add(userNew2);
    newList.add(userNew3);
    newList.add(userNew4);
    newList.add(userNew5);
 
    //去交集,既獲取id相同的交集,需要更新
    //1.先提取出id和結果,用map形式
    List<String> oldIds = new ArrayList<>();
    List<String> newIds = new ArrayList<>();
    oldList.stream().forEach(it->oldIds.add(it.getId()));
    newList.stream().forEach(it->newIds.add(it.getId()));
//    oldIds.stream().forEach(System.out::println);
//    newIds.stream().forEach(System.out::println);
 
    //取交集id
    System.out.println("-----------------交集----------------------");
    List<String> collectUpdate = newIds.stream().filter(it -> oldIds.contains(it)).collect(Collectors.toList());
    collectUpdate.stream().forEach(System.out::println);
    //取對應交集的對象
    System.out.println("------------------交集的對象---------------------");
    List<UserDTO> userUpdate = newList.stream().filter(it -> collectUpdate.contains(it.getId())).collect(Collectors.toList());
    userUpdate.stream().forEach(System.out::println);
 
    //取old的差集
    System.out.println("-----------------old的差集----------------------");
    List<String> collectDelete = oldIds.stream().filter(it -> !newIds.contains(it)).collect(Collectors.toList());
    collectDelete.stream().forEach((System.out::println));
    //取對應old差集對象
    System.out.println("-----------------old差集對象----------------------");
    List<UserDTO> userDelete = oldList.stream().filter(it -> collectDelete.contains(it.getId())).collect(Collectors.toList());
    userDelete.stream().forEach(System.out::println);
 
    //取new的差集
    System.out.println("-----------------new的差集----------------------");
    List<String> collectAdd = newIds.stream().filter(it -> !oldIds.contains(it)).collect(Collectors.toList());
    collectAdd.stream().forEach((System.out::println));
    //取對應old差集對象
    System.out.println("-------------------old差集對象--------------------");
    List<UserDTO> userAdd = newList.stream().filter(it -> collectAdd.contains(it.getId())).collect(Collectors.toList());
    userAdd.stream().forEach(System.out::println);
 
    //取并集
    System.out.println("-------------------并集--------------------");
    List<String> allIds = new ArrayList<>();
    //獲取一個包含了oldIds和newIds的總結合,但是沒有去重
    allIds.addAll(oldIds);
    allIds.addAll(newIds);
    //去重,獲取并集ids的新集合
    List<String> joinIds = allIds.stream().distinct().collect(Collectors.toList());
    joinIds.stream().forEach(System.out::println);
  }
}

結果:

Java8 Stream對兩個 List 遍歷匹配數據的優化處理操作

ps:并集對象集合并沒有寫,因為能夠得到判斷id自然就能得到了

以上這篇Java8 Stream對兩個 List 遍歷匹配數據的優化處理操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u011442726/article/details/96770773

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av一级毛片 | 久久久久久久久久久久99 | 精品一二三区 | aaa级大片 | 成人精品鲁一区一区二区 | 这里只有精品视频在线 | 国产片在线看 | 日韩成人一区 | 在线 欧美 日韩 | 欧美日韩亚洲一区二区 | 少妇一区二区三区免费观看 | 成人小视频在线看 | 免费国产一区 | 国产精品网站在线观看 | 国产精品美女久久久 | av一二三四 | 久久久久成人精品 | 亚洲免费观看视频网站 | 国产不卡免费视频 | 欧美黑人一级爽快片淫片高清 | 久久一二区 | 久久久久国产 | 国产午夜在线 | 久久国产精品久久久久久电车 | 亚洲福利一区二区 | 日韩精品一区二区在线观看 | a久久 | 国产日韩久久 | 国产美女网站视频 | 羞羞视频在线免费 | 深夜免费网站 | 欧美日韩久久精品 | 精品国产区一区二 | 久久一精品 | 荷兰欧美一级毛片 | 精品国产乱码久久久久久密桃99 | 亚洲综合区 | 久久精品一区 | 欧美天天| 亚洲欧美一区在线 | 久久久久久久久99精品 |