java如何使用流计算元素
我需要在arraylist中加载文件数据,这是我通过创建一个方法完成的。如何通过创建单独的计数方法来计算使用streams的学生人数。我有一个包含构造函数、getter和setter的学生类
我有一个包含数据的文件
Name: a
Subjects : eng, phy, chem
Name: b
Subjects : math, bio
//name is variable in student class // getName is the getter
List<Student> stu = new ArrayList<>():
public static Map<String,Long> names(List<Student> name, Predicate <Student> getName) {
Map<String, Long> n = stu.stream()
.filter(getName)
.collect(Collectors.groupingBy(e -> e.getName(),Collectors.counting()));
System.out.println(Collectors.counting());
return n;
}
它应该只显示学生人数
# 1 楼答案
由于您坚持使用流(对于列表中的元素数量,当然不建议使用流):
由于
Stream.count()
返回一个long
,您的方法必须返回一个long
,我发现这是毫无意义的,因为我们知道a列表不能容纳比int
更多的学生;或者我们需要从long
转换为int
。我使用Math.toIntExact
进行转换评论是正确的:建议使用
listOfStudents.size()
(并且不使用流)会更容易你在问题中的方法似乎是数一数同名的学生。在您的示例中,结果可能是
{a=1,b=1}
。但前提是两个学生都满足谓词也传递给方法小贴士:注意在你的程序中使用说出名字,这对可读性非常重要。调用您的方法,例如
count
或getNumberOfStudents
(而不是names
)。调用保存列表的参数,例如students
或studentList
(而不是name
)。不要把你的谓词称为getter(谓词和getter是两个完全不同的东西)。另外n
对于返回值来说并不能真正说明什么,这让我们想知道您希望该方法返回什么。这不仅仅是为了我们(尽管取悦其他堆垛者是获得好答案的一种既好又便宜的方式);我认为好的名字也会帮助你保持对这个项目的清晰想法