Если Вы не заботитесь о порядке, можно просто пихнуть объекты в HashSet
, если Вы делаете , хотят поддержать порядок, можно сделать что-то вроде этого:
var unique = new List();
var hs = new HashSet();
foreach (T t in list)
if (hs.Add(t))
unique.Add(t);
Или Linq путь:
var hs = new HashSet();
list.All( x => hs.Add(x) );
Редактирование: HashSet
метод O(N)
время и O(N)
, пространство при сортировке и затем создании уникальным (как предложено lassevk и другие) O(N*lgN)
время и O(1)
пространство, таким образом, это не столь ясно мне (как это было на первый взгляд), что сортировка, путь является нижним (мои извинения за временный файл вниз голосуют...)
Это может быть способ сделать это, но я не думаю, что это очень хороший способ использовать распорки. Если actionA не проходит проверку, вы, скорее всего, захотите иметь либо результат ввода без перенаправления для него, который показывает ошибки, либо, возможно, страницу с глобальной ошибкой, которая может отображать его.
Я полагаю, вы могли бы где-то сохранить ошибки действия как и сеанс между перенаправлениями, но вы не будете использовать фреймворк в том виде, в каком он был разработан.
Эта функция не поддерживается Struts2 по умолчанию. Решение существует (это делается простым перехватчиком struts, который хранит сообщения в сеансе).
В основном вам нужно использовать предопределенные перехватчики, называемые store, которые принимают operationMode: store и извлекают:
<package name="a" extends="struts-default" namespace="/a">
<action name="actionA" class="actionAClass">
<!-- Here you are storing the Error messages -->
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<!-- include your default stack in case you need to load other interceptors -->
<interceptor-ref name="defaultStack" />
<result name="input" type="redirectAction">
<param name="actionName">actionB</param>
<param name="namespace">/b</param>
</result>
<result type="redirectAction">
<param name="actionName">actionB</param>
<param name="namespace">/b</param>
</result>
</action>
</package>
<package name="b" extends="struts-default" namespace="/b">
<action name="actionB" class="actionBClass">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<!-- include your default stack in case you need to load other interceptors -->
<interceptor-ref name="defaultStack" />
<result>/foo.jsp</result>
</action>
</package>