写了一个函数:通过判断quesuid是否相等来返回不同的数据
public ArrayList<Queshu> listLost() {
ArrayList<Queshu> all = listAll();
ArrayList<Queshu> part = listPart();
ArrayList<Queshu> lost = new ArrayList<>();
for(Queshu s1:all ){
for(Queshu s2:part){
if (!(s1.getQuesuid()==s2.getQuesuid()))
lost.add(s1);
}
}
return lost;
}
但是运行之后结果显示的好像不太对
全部代码;
import java.util.ArrayList;
import java.util.List;
import util.FileUtils;
import vo.Queshu;
public class ProblemBDAO {
/**
* 显示全部记录
*
* @return
*/
public ArrayList<Queshu> listAll() {
List <String> datas=FileUtils.readLines("d:/ks/20214075221/data/b/all.txt");
ArrayList<Queshu> all = new ArrayList<Queshu>();
for(String data :datas){
String temp[]=data.replaceAll("\"","").split(",");
Queshu queshu = new Queshu(Integer.parseInt(temp[0]),temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);
all.add(queshu);
}
return all;
}
public ArrayList<Queshu> listPart() {
List <String> datas=FileUtils.readLines("d:/ks/20214075221/data/b/part.txt");
ArrayList<Queshu> all = new ArrayList<Queshu>();
for(String data :datas){
String temp[]=data.replaceAll("\"","").split(",");
Queshu queshu = new Queshu(Integer.parseInt(temp[0]),temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);
all.add(queshu);
}
return all;
}
//返回不同的数据
public ArrayList<Queshu> listLost() {
ArrayList<Queshu> all = listAll();
ArrayList<Queshu> part = listPart();
ArrayList<Queshu> lost = new ArrayList<>();
for(Queshu s1:all ){
for(Queshu s2:part){
if (!(s1.getQuesuid()==s2.getQuesuid()))
lost.add(s1);
}
}
return lost;
}
//返回重复数据
public ArrayList<Queshu> listRepeat() {
ArrayList<Queshu> allList = listAll();
ArrayList<Queshu> partList = listPart();
ArrayList<Queshu> repeatList = new ArrayList<>();
for(Queshu s1:allList){
for(Queshu s2:partList){
if (s1.getQuesuid()==s2.getQuesuid())
repeatList.add(s1);
}
}
return repeatList;
}
public static void main(String[] args) {
}
}
Vo:
package vo;
/**
*
* @author Administrator
*/
public class Queshu implements Comparable{
private int quesuid ;//编号
private String shu_name;//缺书书名
private String banshe;//缺书出版社
private String zuozhe;//作者
private String chuban_date;//出版日期
private String ISBN;//书号
private String liuyan;//留言
private String user;//用户名
private String time;//登记时间
public Queshu() {
}
public Queshu(int quesuid, String shu_name, String banshe, String zuozhe, String chuban_date, String ISBN, String liuyan, String user, String time) {
this.quesuid = quesuid;
this.shu_name = shu_name;
this.banshe = banshe;
this.zuozhe = zuozhe;
this.chuban_date = chuban_date;
this.ISBN = ISBN;
this.liuyan = liuyan;
this.user = user;
this.time = time;
}
public int getQuesuid() {
return quesuid;
}
public void setQuesuid(int quesuid) {
this.quesuid = quesuid;
}
public String getShu_name() {
return shu_name;
}
public void setShu_name(String shu_name) {
this.shu_name = shu_name;
}
public String getBanshe() {
return banshe;
}
public void setBanshe(String banshe) {
this.banshe = banshe;
}
public String getZuozhe() {
return zuozhe;
}
public void setZuozhe(String zuozhe) {
this.zuozhe = zuozhe;
}
public String getChuban_date() {
return chuban_date;
}
public void setChuban_date(String chuban_date) {
this.chuban_date = chuban_date;
}
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
public String getLiuyan() {
return liuyan;
}
public void setLiuyan(String liuyan) {
this.liuyan = liuyan;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String toString() {
return "Queshu{" + "quesuid=" + quesuid + ", shu_name=" + shu_name + ", banshe=" + banshe + ", zuozhe=" + zuozhe + ", chuban_date=" + chuban_date + ", ISBN=" + ISBN + ", liuyan=" + liuyan + ", user=" + user + ", time=" + time + '}';
}
@Override
public int compareTo(Object o) {
Queshu other = (Queshu) o;
return Integer.compare(this.quesuid, other.getQuesuid());
}
}
首先 你的Queshu类 可以覆写一下 这个equals 方法,然后 就可以直接使用 list的方法操作了
@Override
public boolean equals(Object obj) {
if (null == obj) return false;
Queshu queshuObj = (Queshu) obj;
return this.quesuid.equals(queshuObj.quesuid);
}
list 操作交集 和 去除多余的数据
list1.removeAll(list2); // 去除list1中 包含 list2的数据
list2.retainAll(list2); // 取 list1 和 list2 的 交集
// 先把 all 和 part 合并起来 list3
list3.removeAll(all 和 part的交集) // 这就可以得到差集了
for(Queshu s1:all ){
for(Queshu s2:part){
if (!(s1.getQuesuid()==s2.getQuesuid()))
lost.add(s1);
}
}
你这只是判断当前比较的不相等就添加到列表,应该改为这样:
for(Queshu s1:all ){
boolean equal = false;
for(Queshu s2:part){
if (s1.getQuesuid()==s2.getQuesuid())
equal = true;
break;
}
if (!equal) lost.add(s1);
}
这样是找 all 中在 part 中不存在的。还可以试试简化一下,第二个循环判断,改成 part.contains(s1) 看是否满足要求。
逻辑上有点问题,可以用以下代码试下(只写了关键的两个方法)
//返回不同的数据
public ArrayList<Queshu> listLost() {
ArrayList<Queshu> all = listAll();
ArrayList<Queshu> part = listPart();
ArrayList<Queshu> lost = new ArrayList<>();
for(Queshu s1:all ){
for(Queshu s2:part){
if (s1.getQuesuid()==s2.getQuesuid())
continue;
}
lost.add(s1);
}
return lost;
}
//返回重复数据
public ArrayList<Queshu> listRepeat() {
ArrayList<Queshu> allList = listAll();
ArrayList<Queshu> partList = listPart();
ArrayList<Queshu> repeatList = new ArrayList<>();
for(Queshu s1:allList){
for(Queshu s2:partList){
if (s1.getQuesuid()!=s2.getQuesuid())
continue;
}
repeatList.add(s1);
}
return repeatList;
}