Поскольку вы настаиваете на использовании потока (что, безусловно, не рекомендуется для количества элементов в списке):
public static int count(List<Student> listOfStudents) {
long count = listOfStudents.stream().count();
int n = Math.toIntExact(count);
return n;
}
Поскольку Stream.count()
возвращает long
, либо ваш метод должен вернутьlong
, который я счел бессмысленным, поскольку мы знаем, что в списке не может содержаться большее количество студентов, чем в int
;или нам нужно конвертировать из long
в int
. Я использую Math.toIntExact
для конвертации.
Комментарии верны: было бы проще и рекомендовано использовать listOfStudents.size()
(и без потока).
Какой ваш метод в вопросеКазалось, что делает, считал студентов, имеющих одно и то же имя. В вашем примере результат может быть {a=1,b=1}
. Но только если оба студента удовлетворяют предикату, также переданному методу.
Совет: позаботьтесь об использовании в своей программе говорящих имен, это очень много значит для читабельности. Вызовите метод, например count
или getNumberOfStudents
(не names
). Вызовите параметр, содержащий список, например students
или studentList
(не name
). Не называйте свой предикат тем же, что и получатель (предикат и получатель - две совершенно разные вещи). Также n
для возвращаемого значения ничего не говорит и заставляет задуматься, что вы хотите, чтобы метод возвращал. Это не только ради нас (хотя радовать других стакеров - это хороший и дешевый способ получить хорошие ответы);Я думаю, что хорошие имена также помогут вам прояснить ваши мысли о программе.