Java返回不同的数据

写了一个函数:通过判断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;
    }

但是运行之后结果显示的好像不太对

img

全部代码;


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(allpart的交集)  // 这就可以得到差集了
        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;
    }