Java 使用方法筛选arraylist

Java 使用方法筛选arraylist,java,list,search,methods,filter,Java,List,Search,Methods,Filter,我正在尝试返回一个基于用户给定日期的患者医生列表。但每次我运行该方法时,它都会返回所有医生的列表,而不是经过筛选 主管道上的代码 public void printDoctorsWithPatientsOnDate() throws ParseException { ArrayList<String> docs = new ArrayList(); System.out.print("Enter the date(mm-dd-yyyy): "); Date d

我正在尝试返回一个基于用户给定日期的患者医生列表。但每次我运行该方法时,它都会返回所有医生的列表,而不是经过筛选

主管道上的代码

public void printDoctorsWithPatientsOnDate() throws ParseException
{
    ArrayList<String> docs = new ArrayList();
    System.out.print("Enter the date(mm-dd-yyyy): ");
    Date dt = new SimpleDateFormat("MM-dd-yyyy").parse(sc.nextLine());
    docs = app.getDoctorsWithPatientsOnDate(dt);
    for(String i : docs)
    {
    System.out.println(i);
    }
}
我初始化了2个患者,即患者1和患者2。病人1的医生叫李医生,病人2的医生叫詹姆斯医生。首先,我为patient1输入以下信息,而我将patient2保留为空(目前)

当我拿到医生名单时,问题就来了。即使日期是错误的,它仍会继续打印名单上的每一位医生

Enter the date(mm-dd-yyyy): 11-20-2012
dr.lim
dr.james

我没有要复制的所有代码,但我会首先关注searchDatesForDoc方法。试试这个:

public ArrayList<String> getDoctorsWithPatientsOnDate(Date date)
{
    ArrayList<String> doctors = new ArrayList();
    for(Patient i : patientList)
    {
        System.out.println("Current patient is: " + i.getPatientName());
        if(i.searchDatesForDoc(date) == true);
        {
            doctors.add(i.getDoctorName());
        }
    }
    return doctors;
}

public boolean searchDatesForDoc(Date date){
    for(Date i : datesOfVisit)
    {
        if(i.equals(date))
        {
            System.out.println("\tVisited on day: " + i);
        return true;
        }
    }
    return false;
}
public ArrayList getDoctorsWithPatientsOnDate(日期)
{
ArrayList医生=新建ArrayList();
for(患者i:患者列表)
{
System.out.println(“当前患者为:+i.getPatientName());
如果(i.searchDatesForDoc(日期)=真);
{
添加(i.getDoctorName());
}
}
返回医生;
}
公共布尔搜索日期fordoc(日期){
(日期i:访问日期)
{
如果(i.等于(日期))
{
System.out.println(“\t在第天访问:“+i”);
返回true;
}
}
返回false;
}
添加这两行后运行时,它将打印患者姓名,后跟患者就诊的天数。首先要检查的是患者是否确实在列出的日期就诊。如果没有,那么你的问题就在那里。使用调试器跟踪代码的每一步,这将更容易调试。

由于某种未知的原因(对我来说),我给出的公认答案被版主删除了。
问题已经解决了。问题是他在if语句后面有一个额外的分号。

if(即serachDatesForDoc(date)==true)
-您不需要在那里使用
==true
。As
searchDatesForDoc
返回一个布尔值,您可以将其用作条件。我怀疑这是你的问题-我不明白为什么会这样-但这可能会有帮助。@MrB我试过你说的,但什么也没发生。我仍然有同样的问题..试过你说的,这是输出。我输入了错误的日期,它仍然打印医生lol输入日期(mm dd yyyy):10-02-2010当前患者是:patient1当前患者是:patient2 dr.lim dr.James现在尝试将
系统.out.println(“当前…”
命令移动到
if
语句中(因此向下移动两行).让我们知道它的作用。
Enter the Patient's name: patient1
Enter the assessment: alz
Enter the date of Visit(mm-dd-yyyy): 10-02-2010
Enter the date(mm-dd-yyyy): 11-20-2012
dr.lim
dr.james
public ArrayList<String> getDoctorsWithPatientsOnDate(Date date)
{
    ArrayList<String> doctors = new ArrayList();
    for(Patient i : patientList)
    {
        System.out.println("Current patient is: " + i.getPatientName());
        if(i.searchDatesForDoc(date) == true);
        {
            doctors.add(i.getDoctorName());
        }
    }
    return doctors;
}

public boolean searchDatesForDoc(Date date){
    for(Date i : datesOfVisit)
    {
        if(i.equals(date))
        {
            System.out.println("\tVisited on day: " + i);
        return true;
        }
    }
    return false;
}