Для кода Java у меня есть класс Called Animal, где у меня есть переменные + их методы получения и установки, такие как имя и возраст. Основной метод (в классе Launcher) позволяет пользователю «удалить» животное с помощью метода addAnimal и позволяет пользователю «забрать» животное с помощью метода removeAnimal. Есть три животных для использования, где у каждого из них есть свой класс: собака, кошка и птица. Я хочу иметь возможность подсчитывать частоту каждого животного и отображать ее в качестве опции: «Частота отображения», которая отображала бы частоту каждого животного, независимо от того, было ли оно «сброшено» или нет.
Я использовал статический частотный метод в Коллекциях Collections.frequency()
. Я нашел это в Stack Overflow и решил, что это сработает. Тем не менее, каждый раз, когда я добавляю Dog, Cat или Bird, частота остается равной нулю. Я также попытался использовать Map<Animal, Long> counts = animals.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
, который также не дал ожидаемого результата. Он выводит что-то вроде этого: Frequency of type 2 is {Cat@27d6c5e0=1, Bird@4f3f5b24=1}
, где тип 2 - это Cat (вариант 2, в котором животное я бы хотел "высадить").
Ниже мой код для того, где я показываю частоту. Я не уверен, что это будет более удобно.
ArrayList<Animal> animals = new ArrayList<>();
boolean addAnimal (int type, String name, int age) {
//int frequency = Collections.frequency(animals, type);
boolean isAdded = false;
switch (type) {
case 1:
animals.add(new Dog(name, age));
isAdded = true;
System.out.println("Frequency of " + type + ": "+ Collections.frequency(animals, (new Dog(name, age))));
case 2:
animals.add(new Cat(name, age));
isAdded = true;
System.out.println("Frequency of " + type + ": "+ Collections.frequency(animals, (new Cat(name, age))));
case 3:
animals.add(new Bird(name, age));
isAdded = true;
System.out.println("Frequency of " + type + ": "+ Collections.frequency(animals, (new Bird(name, age))));
default:
isAdded = false;
}//end of switch
return isAdded;
}//end of addAnimal(type, name, age)
// here comes the method to remove an animal...
}// end of class Database
Я ожидаю, что моя программа будет делать то, что, когда я выбираю опцию для отображения частоты каждого животного (допустим, это будет вариант 3), я бы хотел, чтобы она вывела «Частота типа Dog (тип 1) равен 3, потому что есть три собаки »и что-то очень похожее для кошек (тип 2) и птиц (тип 3). Есть ли упрощенный способ сделать это? Я пишу на Java Eclipse.