有 Java 编程相关的问题?

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

Java如何筛选值(列表)

我会尽力解释的。 让我们想象一下,我上过这门课:

public class Student {
    public String nome;
    public int number;
    public int age;
    public int grade;
}

现在我将有一个定义如下的地图:

Map<String, Student> students;

我想找到成绩>;=我做了这样的事情:

public List<Student> grade() {
  return students.values()
                 .stream()
                 .filter(Student::verifyGrade)
                 .map(Student::clone)
                 .collect(Collectors.toList());
}

第一个问题来了:
-我在上收到错误“不兼容类型:无法推断类型变量R”。地图(学生::克隆)

第二个问题: 现在,如果我的地图定义了这样的东西:(这只是我在想的一个例子),我将如何在1号使用相同的样式进行过滤

Map<String, List<Student> >

感谢您的关注:)


共 (2) 个答案

  1. # 1 楼答案

    如果你只想做过滤,那么你不需要.map(Student::clone),但是如果你确实需要克隆对象,那就继续读下去

    Object::clone返回一个类型Object。因此编译错误,有一种解决方法,将返回的Object转换为类型Person,但我只需要创建一个复制构造函数或一个方法,将Student的内容复制到一个新实例中并返回它

    然后简单地做:

    .map(Student::new) // assuming you have a constructor public Student(Student s){...}
    

    或者

    .map(Student::copy) // assuming you have a method public static Student copy(Student s){...}
    

    回答第二个问题:

    List<Student> resultSet = 
               myMap.values()
                    .stream()
                    .flatMap(Collection::stream)
                    .filter(Student::verifyGrade)
                    .map(Student::new)
                    .collect(Collectors.toList());
    

    如果不需要克隆Student对象,只需删除对
    的调用即可 .map(Student::new)

  2. # 2 楼答案

    第一个问题你不需要在filter之后使用map(Student::clone)

    return students.values()
            .stream()
            .filter(Student::verifyGrade)
            .collect(Collectors.toList());
    

    第二个问题,如果地图像Map<String, List<Student>>,你可以像这样使用flatMap

    return students.values()
            .stream()
            .flatMap(List::stream)
            .filter(Student::verifyGrade)
            .collect(Collectors.toList());