如何在java中使用流映射过滤器过滤列表对象



我想用java过滤一个学生列表。我在科特林有一个这样的学生班。

class Student(
var id: String? = null,
var firstName: String? = null,
var lastName: String? = null
) {
constructor(entity: StudentCourse?): this() {
if (entity != null) {
this.id = entity.id.id
this.name = entity.name
}
}
}
class StudentCourse (@EmbeddedId open var id: StudentCourseId)  {

constructor() : this(StudentCourseId())
open var name: Boolean? = null
}
@Embeddable
open class StudentCourseId: Serializable {
open var id: String? = null
open var deptName: String? = null
}

这是我要筛选的列表:

var students: List<Student> = listOf(
Student("14adbv45", "dan", "GEG"),
Student("96adbv42","Bob", "Bowyer"),
Student("30adbv45","Emily", "Eden")
)

我做这个

List<students> studentListContainsFirstNameBob = students.stream()
.map(StudentCourse)
.filter(e -> e.getFirstName.equals("Bob"))
.flatMap(List::stream);

但它不起作用。

,我该怎么办

您的代码中存在多个问题。例如本部分:

constructor(entity: StudentCourse?): this() {
if (entity != null) {
this.id = entity.id.id
this.name = entity.name
}
}

entity.name指的是StudentCourse#name,但此属性实际上是Boolean类型,因此将其与String进行比较没有多大意义。您还将.id加倍,这是不正确的。

接下来,我不确定这个剪辑应该做什么,是想把一个学生和给定的课程联系起来吗?如果是这样的话,你可能想给一门课程添加一个学生列表,或者给一个学生添加一个课程列表(听起来更正确(。

最后,当涉及到筛选列表时,您可以通过以下方式获得名为Bob的学生:

var studentListContainsFirstNameBob: List<Student> = students
.filter { it.firstName.equals("Bob") }
.toList()

注意,it变量指的是列表中的元素,它也可以写成:

var studentListContainsFirstNameBob: List<Student> = students
.filter { student -> student.firstName.equals("Bob") }
.toList()

最新更新