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对象:
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)));