Лямбда, несколько forEach с кастингом
Нужна помощь в размышлениях о лямбдах от моих коллег-светил из StackOverflow.
Стандартный случай выбора списка из списка, чтобы собрать некоторых детей вглубь графика. Какие удивительные способы моглиLambdas
помочь с этим образцом?
public List<ContextInfo> list() {
final List<ContextInfo> list = new ArrayList<ContextInfo>();
final StandardServer server = getServer();
for (final Service service : server.findServices()) {
if (service.getContainer() instanceof Engine) {
final Engine engine = (Engine) service.getContainer();
for (final Container possibleHost : engine.findChildren()) {
if (possibleHost instanceof Host) {
final Host host = (Host) possibleHost;
for (final Container possibleContext : host.findChildren()) {
if (possibleContext instanceof Context) {
final Context context = (Context) possibleContext;
// copy to another object -- not the important part
final ContextInfo info = new ContextInfo(context.getPath());
info.setThisPart(context.getThisPart());
info.setNotImportant(context.getNotImportant());
list.add(info);
}
}
}
}
}
}
return list;
}
Обратите внимание, что сам список отправляется клиенту какJSON
так что не зацикливайтесь на том, что возвращается. Должно быть несколько аккуратных способов, которыми я могу сократить петли.
Интересно посмотреть, что создают мои коллеги-эксперты. Рекомендуется несколько подходов.
РЕДАКТИРОВАТЬ
findServices
и дваfindChildren
методы возвращают массивы
РЕДАКТИРОВАТЬ - БОНУСНЫЙ ВЫЗОВ
«Не важная часть» оказалась важной. Мне действительно нужно скопировать значение, доступное только вhost
пример. Это, кажется, разрушает все прекрасные примеры. Как можно продвинуть государство вперед?
final ContextInfo info = new ContextInfo(context.getPath());
info.setHostname(host.getName()); // The Bonus Challenge