首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ArrayList removeAll

Java ArrayList removeAll
EN

Stack Overflow用户
提问于 2021-11-02 06:58:51
回答 3查看 144关注 0票数 0

我在做一个假的医院数据库。我有一个ArrayList,它结合了所有可能的时间,从理论上说,医生可以进行预约,而另一个ArrayList则拥有实际的注册预约。

代码语言:javascript
复制
Availability {
  int doctorid;
  String specialty;
  Date date;
  int order_of_appointment;
}
//////////

ArrayList<Availability> allTimes;

ArrayList<Availability> busyTimes;

我想要实现的是找到医生免费的时代。的结果(allTimes - busyTimes)

我试过使用allTimes.removeAll(busyTimes),但它没有删除任何东西。

我确保在Availability类中重写了equals()方法,但是它仍然没有删除任何内容。

代码语言:javascript
复制
@Override
public boolean equals(Object o) {
  if (this == o) return true;
  if (!(o instanceof Availability)) return false;   
  Availability that = (Availability) o;
  return doctorid == that.doctorid &&
      order_of_appointment == that.order_of_appointment &&
      Objects.equals(specialty, that.specialty) &&
      Objects.equals(date, that.date);
} 

输出:

  1. busyTimes =可用性{doctorid=1,专长=“内科”,date=2021-11-02,order_of_appointment=2}

  1. allTimes =可用性{doctorid=1,专长=‘内科’,date=2021-11-02,order_of_appointment=1},可用性{doctorid=1,专长=‘内科’,日期=2021-11-02,order_of_appointment=2},可用性{doctorid=1,专业=‘内科’,日期=2021-11-02,order_of_appointment=3}

  1. --我为freeTimes获得的输出与allTimes完全相同,尽管我希望它能取消与allTimes的约会

我完全不知道是什么导致了这一切。任何帮助都将不胜感激。提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2021-11-02 07:24:31

您没有显示如何创建数组,也没有显示如何添加元素。

我用ArrayLists做了一个简单的程序,并按预期工作:

代码语言:javascript
复制
import java.util.*;

class A {
  int id;
  A(int id) {
    this.id = id;
  }

  @Override
  public boolean equals(Object o) {
    return o instanceof A && this.id == ((A)o).id;
  }
  public String toString() {
    return String.format("A{id:%s}", id);
  }

  public static void main(String ... args) {
    List<A> a = new ArrayList<A>(Arrays.asList(new A(1), new A(2)));
    List<A> b = new ArrayList<A>(Arrays.asList(new A(2), new A(3)));
    a.removeAll(b);
    System.out.println(a);
  }
}

输出:

代码语言:javascript
复制
[A{id:1}]
票数 0
EN

Stack Overflow用户

发布于 2021-11-02 15:17:22

问题是,即使我将日期格式设置为“”,它仍然将时间存储在date对象中。我将日期对象转换为字符串,然后比较字符串,这是可行的。谢谢你们所有人。

票数 0
EN

Stack Overflow用户

发布于 2021-11-02 07:26:24

您需要用比较逻辑覆盖可用性类中的等于(Object)方法。

我实现了。请查收。

代码语言:javascript
复制
import java.util.Date;

public class Availability {

    private int doctorId;
    private String specialty;
    private Date date;
    private int orderOfAppointment;

    public Availability() {
        super();        
    }

    public Availability(int doctorId, String specialty, Date date, int orderOfAppointment) {
        super();
        this.doctorId = doctorId;
        this.specialty = specialty;
        this.date = date;
        this.orderOfAppointment = orderOfAppointment;
    }

    public int getDoctorId() {
        return doctorId;
    }

    public void setDoctorId(int doctorId) {
        this.doctorId = doctorId;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public int getOrderOfAppointment() {
        return orderOfAppointment;
    }

    public void setOrderOfAppointment(int orderOfAppointment) {
        this.orderOfAppointment = orderOfAppointment;
    }

    @Override
    public String toString() {
        return "Availability  [doctorId=" + doctorId + ", specialty=" + specialty + ", date=" + date
                + ", orderOfAppointment=" + orderOfAppointment + "]";
    }

    @Override
    public boolean equals(Object obj) {
        boolean returnVal = false;
        Availability busyslote = (Availability) obj;
        if (this.doctorId == busyslote.doctorId && this.orderOfAppointment == busyslote.orderOfAppointment
                && this.specialty.equalsIgnoreCase(busyslote.specialty) && this.date.equals(busyslote.date)) {
            returnVal = true;
        } else {
            returnVal = false;
        }

        return returnVal;
    }
}
代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class AppointmentMain {

    public static void main(String[] args) {

        List<Availability> allAppointment = new ArrayList<>();
        List<Availability> attenedAppointment = new ArrayList<>();

        Availability obj1 = new Availability(1, "Internal Medicine", new Date(), 1);
        Availability obj2 = new Availability(1, "Internal Medicine", new Date(), 2);
        Availability obj3 = new Availability(1, "Internal Medicine", new Date(), 3);

        allAppointment.add(obj1);
        allAppointment.add(obj2);
        allAppointment.add(obj3);

        Availability obj4 = new Availability(1, "Internal Medicine", new Date(), 3);

        attenedAppointment.add(obj4);

        System.out.println("Befour count :" + allAppointment.size());
        allAppointment.removeAll(attenedAppointment);
        System.out.println("After count :" + allAppointment.size());
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69806440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档