Нуждайтесь в помощи, думая в lambdas от моих друзей 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
возвращают массивы
EDIT - BONUS CHALLENGE
"Незначительная часть" оказалась важной. Мне действительно нужно скопировать значение, доступное только в экземпляре host
. Кажется, это испортило все прекрасные примеры. Как переносить состояние вперед?
final ContextInfo info = new ContextInfo(context.getPath());
info.setHostname(host.getName()); // The Bonus Challenge