К сожалению, поскольку в Delphi отсутствуют лямбда-выражения, использующие Collections, или общие списки из среды Spring могут сделать исходный код немного длиннее. Также некоторые люди не любят использовать анонимные методы, потому что их синтаксис очень громоздок. Но это вопрос вкуса imho.
С коллекциями ваш пример будет выглядеть так:
list2.AddAll(list1.Where(
function(value: pMyList): Boolean
begin
Result := value.a = myvalue;
end));
Имейте в виду, что обе упомянутые реализации универсальных списков реализуют интерфейсы, и большинство методов работают с ними. В приведенном выше примере это не имеет значения, потому что вы не передаете list1 напрямую. В противном случае он будет освобожден после.
С этим единственным примером преимущества их использования могут быть неясны, но когда вы выполняете много операций, фильтруете данные, помещаете их в другие списки и многое другое, это становится проще, и вам не нужно писать много дополнительных методов. сделать эти операции. Но, как я уже сказал, это дело вкуса, многим разработчикам Delphi не нравится этот синтаксис и способ написания кода.