Упрощенная структура кода выглядит следующим образом:
public class A {
private List<B> bList;
}
public class B {
private A a;
private List<C> cList;
}
public class C {
private B b;
private String name;
}
Я бы хотел отфильтровать список объектов A таким образом, чтобы они содержали только те объекты C с именем «123».
Я не хочу менять исходный список. Я могу использовать этот код:
List<A> orginalList;
orginalList.stream()
.flatMap(a -> a.getBlist().stream())
.flatMap(b -> b.getClist().stream())
.filter(c -> "123".equals(c.getName()))
.collect(toList());
Но этот код вернет мне только отфильтрованный список C объектов. Я хочу получить список объектов A, содержащий список объектов B, который содержит список объектов C, имеющих только имя = "123".
Например, у меня есть что-то подобное:
[
{
"bList": [
{
"cList": [
{
"name": "123"
},
{
"name": "555"
}
]
}
]
}
]
Я хочу получить:
[
{
"bList": [
{
"cList": [
{
"name": "123"
}
]
}
]
}
]