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)));

 

posted @ 2020-09-08 09:44  张财华  阅读(547)  评论(0编辑  收藏  举报