Вы можете получить результат следующим образом:
List<C> result = myList.stream()
.flatMap(a -> a.getB().stream())
.flatMap(b -> b.getC().stream())
.filter(c -> Objects.equals(c.getName(), searchName))
.collect(Collectors.toList());
Это создает поток из myList (List<A>
), а затем последовательно выравнивает вложенные коллекции, чтобы получить Stream<C>
, а затем возвращает * 1006.* объекты, которые имеют searchName
и затем, наконец, собирают его в экземпляр списка.