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> >
感谢您的关注:)
# 1 楼答案
如果你只想做过滤,那么你不需要
.map(Student::clone)
,但是如果你确实需要克隆对象,那就继续读下去Object::clone
返回一个类型Object
。因此编译错误,有一种解决方法,将返回的Object
转换为类型Person
,但我只需要创建一个复制构造函数或一个方法,将Student
的内容复制到一个新实例中并返回它然后简单地做:
或者
回答第二个问题:
如果不需要克隆
Student
对象,只需删除对的调用即可
.map(Student::new)
# 2 楼答案
第一个问题你不需要在
filter
之后使用map(Student::clone)
:第二个问题,如果地图像
Map<String, List<Student>>
,你可以像这样使用flatMap
: