情景如下:
存在一个Bean,该Bean有多个属性。存在一个List,里面存放着这些对象,如何去除指定对象(不知道对象index)
问题思考:
- 首先确定不能使用remove(),或者是new一个新的List存放要删除的对象,然后removeAll();
- 考虑重写equals() 和 hashCode();
- 使用迭代器遍历,但是不能直接remove();
问题解决代码如下:
package com.swf.attence.entity;
import com.baomidou.mybatisplus.enums.IdType;
import java.sql.Timestamp;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Objects;
/**
* @author white.hou
* @since 2018-12-30
*/
@TableName("attence_msg")
public class AttenceMsg implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String userid;
private String checkInTime;
private String cameraidIn;
private String checkOutTime;
private String cameraidOut;
private Integer checkState;
private Integer failid;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getCheckInTime() {
return checkInTime;
}
public void setCheckInTime(String checkInTime) {
this.checkInTime = checkInTime;
}
public String getCheckOutTime() {
return checkOutTime;
}
public void setCheckOutTime(String checkOutTime) {
this.checkOutTime = checkOutTime;
}
public Integer getCheckState() {
return checkState;
}
public void setCheckState(Integer checkState) {
this.checkState = checkState;
}
public Integer getFailid() {
return failid;
}
public void setFailid(Integer failid) {
this.failid = failid;
}
public String getCameraidIn() {
return cameraidIn;
}
public void setCameraidIn(String cameraidIn) {
this.cameraidIn = cameraidIn;
}
public String getCameraidOut() {
return cameraidOut;
}
public void setCameraidOut(String cameraidOut) {
this.cameraidOut = cameraidOut;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AttenceMsg that = (AttenceMsg) o;
return Objects.equals(id, that.id) &&
Objects.equals(userid, that.userid) &&
Objects.equals(checkInTime, that.checkInTime) &&
Objects.equals(cameraidIn, that.cameraidIn) &&
Objects.equals(checkOutTime, that.checkOutTime) &&
Objects.equals(cameraidOut, that.cameraidOut) &&
Objects.equals(checkState, that.checkState) &&
Objects.equals(failid, that.failid);
}
@Override
public int hashCode() {
return Objects.hash(id, userid, checkInTime, cameraidIn, checkOutTime, cameraidOut, checkState, failid);
}
@Override
public String toString() {
return "AttenceMsg{" +
"id=" + id +
", userid='" + userid + '\'' +
", checkInTime='" + checkInTime + '\'' +
", cameraidIn='" + cameraidIn + '\'' +
", checkOutTime='" + checkOutTime + '\'' +
", cameraidOut='" + cameraidOut + '\'' +
", checkState=" + checkState +
", failid=" + failid +
'}';
}
}
/**
* 使用Mybtis-Plus插件,该List存放的是原来的List,需要从此List中删除指定对象
*/
List<UserMsg> userMsgs = selectList(new EntityWrapper<UserMsg>().eq("1", 1));
/**
* 此List是寻找指定的对象被userMsgs删除
*/
List<AttenceMsg> attenceMsgs = attenceMsgMapper.selectList(new EntityWrapper<AttenceMsg> ().like("check_in_time", day + "%"));
/**
* 这个List是用来存放那些需要被删除的对象
*/
ArrayList<UserMsg> msgs = new ArrayList<>(16);
for (AttenceMsg a:attenceMsgs
) {
UserMsg userMsg = selectOne(new EntityWrapper<UserMsg>().eq("userid", a.getUserid()));
/**
* 迭代器遍历
*/
Iterator<UserMsg> iterator = userMsgs.iterator();
while (iterator.hasNext()){
UserMsg next = iterator.next();
if (next.equals(userMsg)){
msgs.add(userMsg);
}
}
userMsgs.removeAll(msgs);
}