有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    由于您坚持使用流(对于列表中的元素数量,当然不建议使用流):

    public static int count(List<Student> listOfStudents) {
        long count = listOfStudents.stream().count();
        int n = Math.toIntExact(count);
        return n;
    }
    

    由于Stream.count()返回一个long,您的方法必须返回一个long,我发现这是毫无意义的,因为我们知道a列表不能容纳比int更多的学生;或者我们需要从long转换为int。我使用Math.toIntExact进行转换

    评论是正确的:建议使用listOfStudents.size()(并且不使用流)会更容易

    你在问题中的方法似乎是数一数同名的学生。在您的示例中,结果可能是{a=1,b=1}。但前提是两个学生都满足谓词也传递给方法

    小贴士:注意在你的程序中使用说出名字,这对可读性非常重要。调用您的方法,例如countgetNumberOfStudents(而不是names)。调用保存列表的参数,例如studentsstudentList(而不是name)。不要把你的谓词称为getter(谓词和getter是两个完全不同的东西)。另外n对于返回值来说并不能真正说明什么,这让我们想知道您希望该方法返回什么。这不仅仅是为了我们(尽管取悦其他堆垛者是获得好答案的一种既好又便宜的方式);我认为好的名字也会帮助你保持对这个项目的清晰想法