user10090635
user10090635

Reputation:

Separate Collection Class Object

My project involves 2 classes: Members & Society.

Currently I have written a method 'removeMembers()' in the Society Class that when given a particular month and year, it removes all the members who fit the description.

However, how would I create a separate collection class object which returns the deleted members?

Any help or advice on this will be appreciated, I will also post my code for both classes.

Society Class:

public class Society
{
   private ArrayList<Member> myMembers;
   private Member member;
   private String societyName;
   private boolean feesPaid;


   public Society(String society)
   {
      myMembers = new ArrayList<Member>();
      this.societyName = society;
   }

   public String getSocietyName()
   {
     return societyName;  
   }

   public void join(Member member)
   {
      myMembers.add(member);
   }

   public void showMember(int listPosition)
   {
      Member member;
      if( listPosition < myMembers.size() )
      {
         member = myMembers.get(listPosition);
         System.out.println("Position " + listPosition  + ": " + member);
      }
   }

   public void joinedInMonth(int joined) {
        if (joined > 12 || joined < 1) {
            System.out.println("Invalid number. Please enter a number from 1 - 12.");       
       }
       long joinedMonth = myMembers.stream().filter(m -> m.getMonth() == joined).count();
       System.out.printf("%d members have joined this society on month %d%n", joinedMonth, joined);

   }

   public int numberOfMembers()
   {
      return myMembers.size();
   }

   public void printDetails()
   {
       for (Member m : myMembers) {
      System.out.println("Society Name: " + societyName);
      System.out.println(m.toString());
      System.out.println("--------------------------");
     } 

   }

   public void removeMembers(int month, int year) {
    myMembers.removeIf(m -> m.getYear() == year && m.getMonth() == month);
   }

   public void payFees(Member member)
    {
      if (member.isFeesPaid()) {
        System.out.println("Fees has been paid");
        return;
    }
   }
}

Member Class:

public class Member
{

   private int month;
   private int year;
   private String name;
   /*private Society society;*/
   private List<Society> societies;
   private boolean feesPaid;
   public Member(String name, int month, int year /*Society society*/)
   {
      this.name  = name;
      this.month = month;
      this.year = year;
      this.societies = new ArrayList<>();
   }

   public void joinSociety(Society society)
   {
       societies.add(society);
    }

   public boolean isFeesPaid() {
    return feesPaid;
    }

   public int getYear()
   {
    return year;
   }

   public int getMonth()
   {
     return month;
   }

   public String getName()
   {
     return name;
   }

   public String toString()
   {
     return "Name: " + name + ", Month Joined: " + month + ", Year Joined: " + year;
   }

Upvotes: 0

Views: 61

Answers (1)

Ryuzaki L
Ryuzaki L

Reputation: 40098

You can create a new List in removeMembers() method and add the removed objects to list and return it. remove(Object o) method in arraylist will return the removed object and remaining methods remove(int index), removeIf(Predicate<? super E> filter) and removeRange(int fromIndex, int toIndex) will not return removed object

public List<Members> removeMembers(int month, int year) {
   List<Members> deletedMembers= new ArrayList<>();
    Iterator<Members> members = myMembers.iterator();
    while (members.hasNext()) {
        Member member = members.next();
        if (member.getYear()==year && member.getMonth()==month) {
           deletedMembers.add(members.remove());
        }
    }
    return deletedMembers;
}

Upvotes: 2

Related Questions