Я хочу удалить элементы из списка с условным значением из другого списка. Вот объекты
public class Student{
private String name;
private String age;
private List<Course> listCourses;
//Setters and getters
}
public Class Course{
private String courseName;
private List<CourseDetail> listCoursesDetail;
//Setters and getters
}
public Class CourseDetail{
private String id;
private String grade;
private String professor;
//Setters and getters
}
Итак, как вы можете видеть, у объекта Student
есть список, внутри этого списка есть еще один список из объекта CourseDetail. Чего я хочу добиться, так это отфильтровать или удалить элементы из частного List<CourseDetail> listCoursesDetail
, где идентификатор не равен идентификатору этого другого объекта.
public class Process{
private String name;
private List<ProcessDetail> listProcessDetail;
//Setters and getters
}
public class ProcessDetail{
private String id;
//Setters and getters
}
Предположим, что объект Process заполняется следующим образом
{
"name": "process1",
"listProcessDetail": [
{
"id": "456"
},
{
"id": "666"
},
{
"id": "555"
}
]
}
Студент заполняется следующим образом.
{
"name": "Kevin",
"age": "22",
"listCourses": [
{
"courseName": "Math",
"listCoursesDetail": [
{
"id": "666",
"grade": "88",
"professor": "Xavier"
},
{
"id": "144",
"grade": "90",
"professor": "Marcus"
},
{
"id": "555",
"grade": "100",
"professor": "Joe"
}
]
}
]
}
Ожидаемый результат будет:
{
"name": "Kevin",
"age": "22",
"listCourses": [
{
"courseName": "456",
"listCoursesDetail": [
{
"id": "666",
"grade": "88",
"professor": "Xavier"
},
{
"id": "555",
"grade": "100",
"professor": "Joe"
}
]
}
]
}
Элемент из listCoursesDetail с ID 144
был удален, поскольку такого значения нет в объекте Process
.
Пока у меня есть эти:
Set<String> ids = Process.getListProcessDetail().stream().map(ProcessDetail::id).collect(Collectors.toSet());
В них я сохранил все идентификаторы в наборе.
Затем моя попытка удалить элементы:
List<Course> courses = Student.getListCourses().stream().filter(c -> c.getListCoursesDetail().stream().anyMatch(d -> ids.contains(d.getId()))).collect(Collectors.toList());
С этими строками кода я получаю тот же объект Student, что и ничего не произошло.