Отображение разных месяцев для участников

Я изо всех сил пытаюсь создать метод, который при вводе определенного месяца (с 1 до 12) отображал все Члены, которые присоединились к классу Общество в этом месяце. Например,

Я ввожу: 3 (что означает "март")

Выход: 15 (что указывает на 15 участников, которые присоединились в том же месяце)

Пока у меня есть только метод вывода на печать, который выдает сообщение об ошибке, если вы вводите что-либо ниже 1 или выше 12 в моем методе (присоединилсяInMonth), был бы очень признателен за совет или помощь.

Класс общества:

public class Society
{
   private ArrayList<Member> myMembers;
   private Member member;
   private String societyName;
   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");       
       }
   }

   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 class Member
{
   private int month;
   private int year;
   private String name;
   private Society society;

   public Member(String name, int month, int year)
   {
      this.name  = name;
      this.month = month;
      this.year = year;
   }

   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;
   }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
35
1

Ответы 1

Вы можете просмотреть участников и проверить месяц, в котором каждый из них присоединился:

public void joinedInMonth(int joinedMonth) {
    if (joinedMonth > 12 || joinedMonth < 1) {
         System.out.println("Invalid number");       
    }

    long numJoined = members.stream().filter(m -> m.getMonth() == joinedMonth).count();
    System.out.printf("%d members joined on month %d%n", numJoined, joinedMonth);
}

Большое спасибо, код сработал, однако, поскольку я хотел бы понять код вместо того, чтобы быть удовлетворенным, как работает «длинный», а также поток и фильтр?

Michael Witherspoon 29.06.2018 13:28

@MichaelWitherspoon Не уверен, что понимаю вопрос. Хотите уточнить?

Mureinik 29.06.2018 13:35

1) stream () был вызван в вашем списке, который преобразует его в поток stream, в котором вы можете выполнять свои промежуточные операции. 2) filter () работает с потоками, на самом деле filter принимает предикат, который дает true / false в зависимости от того, выполняет ли он условие или нет в вашем случае те объекты в списке, в которых значение месяца фактически равно объединенному месяцу, поэтому он буду собирать только их и игонре другие. 3) count (): этот метод будет собирать количество всех объектов в вашем списке, которые передают условие предиката и фактически равны объему соединенного месяца.

Gurinder 29.06.2018 13:35

Вы ответили на мой вопрос, я просто хотел быстро разобрать код, поэтому я примерно знаю, как он работает, большое спасибо за помощь. :)

Michael Witherspoon 29.06.2018 13:37

Приведенный выше комментарий @MichaelWitherspoon Gurinder S Panesar довольно хорошо разбирает код (спасибо, BTW!). Вы также можете прочитать Руководства Oracle, чтобы лучше понять

Mureinik 29.06.2018 13:41

Другие вопросы по теме