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


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);
   }
}
package com.shijiayun.api.interfaces.controller.management;


public class UserDTO {


private String id;

private String name;

private Integer age;

public UserDTO(String id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "UserDTO{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM