1. 程式人生 > 實用技巧 >java前後端物件集合去重

java前後端物件集合去重

前端需求:存放五個物件的陣列,根據物件的id屬性去重,並組成一個新的陣列

五個物件:

let userArr = [
    {id: '1', name: '張三'}, 
     {id: '2', name: '李四'}, 
     {id: '1', name: '王五'}, 
     {id: '3', name: '趙六'}, 
     {id: '3', name: '田七'}, 
];

程式碼:使用陣列的reduce()方法

/**
 * reduce方法有兩個引數,一個是回撥函式,一個是初始值
 * 回撥函式有兩個引數,這裡的cur是初始值,對應reduce的第二個引數,
 * next是陣列的下一個元素,即userArr的下一個元素,從第一個開始
 
*/ userArr.reduce((cur, next) => { //如果cur不包含如何元素,則next和cur中的元素就不存在重複的現象,即可以直接把next新增到cur中 if(cur.length == 0){ cur.push(next); return cur; } //遍歷cur陣列,判斷next是否已經存在cur中 let judge = true; for(let i of cur){ if(i.id == next.id){ //如果已經存在,judge變成false
judge = false; } } //如果不存在,則將next新增到cur中 judge ? cur.push(next) : ''; return cur; }, []);

後端需求:有一個存放Users物件的List集合,需要根據每個使用者的id屬性去重,並組合成一個新的Users物件的List集合

五個Users物件:

Users user1 = new Users();
user1.setId("1");
user1.setName("張三");

Users user2 = new Users();
user2.setId(
"2"); user2.setName("李四"); Users user3 = new Users(); user3.setId("1"); user3.setName("王五"); Users user4 = new Users(); user4.setId("3"); user4.setName("趙六"); Users user5 = new Users(); user5.setId("2"); user5.setName("田七");

程式碼:使用Map集合的key唯一性:

List<Users> list = Arrays.asList(user1, user2, user3, user4, user5);
Map<String, Users> map = new HashMap();
//在遍歷過程中,如果map中已經存在了i.getId()這個key,那麼將會替換掉之前那個物件
list.stream().forEach(i -> map.put(i.getId(), i));
//將map中的Users物件重新組裝成List
List<Users> newList = new ArrayList();
map.keySet().stream().forEach(i -> newList.add(map.get(i)));