我会尽力解释。 让我们想象一下这堂课:
public class Student {
public String nome;
public int number;
public int age;
public int grade;
}
现在我的地图定义如下:
Map<String, Student> students;
我想找到等级> = 10的学生,我做了类似的事情:
public List<Student> grade() {
return students.values()
.stream()
.filter(Student::verifyGrade)
.map(Student::clone)
.collect(Collectors.toList());
}
这是第一个问题:
- 我收到错误&#34;不兼容的类型:无法推断类型变量R&#34; on .map(学生::克隆)。
Map<String, List<Student> >
感谢您的关注:)
答案 0 :(得分:1)
第一个问题,您不需要在map(Student::clone)
之后使用filter
:
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());
答案 1 :(得分:1)
如果您只想做过滤器,那么您不需要<div class="headings">
<h1>Penny Calculator</h1>
</div>
<div class="mainCalc">
<input type="number" placeholder=" Amount" value="593" step="1" min="0" id="pennies">
<button type="buttom" id="submit" onclick="calculate()">Calculate!</button>
</div>
<div id="printResult"><span id="result"></span></div>
,但如果您确实需要克隆对象,请继续阅读。
.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
。