Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- /**
- * Classe utilitária para manipular coleções
- * @author Tomaz Lavieri
- */
- public class CollectionUtils {
- /**
- * Não é possivel instaciar CollectionUtils.
- */
- private CollectionUtils(){}
- /**
- * Adciona a coleção <tt>recipient</tt> todos os objetos <tt>T</tt> da lista
- * de <tt>candidates</tt> que coincidirem com o <tt>filter</tt>.
- * <BR>
- * <BR>Adciona o inverso dos itens de <tt>candidates</tt> que
- * {@link #addAllNotMatch(Collection, Filter, Collection)} adcionaria.
- * @param <T> o tipo de objeto a ser adcionado.
- * @param candidates a coleção de candidatos a serem adcionados ao
- * <tt>recipient</tt>.
- * @param filter o filtro que será usado para <b><u>aceitar</u></b> um
- * candidato a ser adcionado ao <tt>recipient</tt>.
- * @param recipient coleção onde os objetos serão adicionados.
- * @see #addAllNotMatch(Collection, Filter, Collection)
- */
- public static <T> void addAllMatch(Collection<? extends T> candidates,
- Filter<T> filter, Collection recipient) {
- for (T object : candidates)
- if (filter.match(object))
- recipient.add(object);
- }
- /**
- * Adciona a coleção <tt>recipient</tt> todos os objetos <tt>T</tt> da lista
- * de <tt>candidates</tt> que não coincidirem com o <tt>filter</tt>.
- * <BR>
- * <BR>Adciona o inverso dos itens de <tt>candidates</tt> que
- * {@link #addAllMatch(Collection, Filter, Collection)} adcionaria.
- * @param <T> o tipo de objeto a ser adcionado.
- * @param candidates a coleção de candidatos a serem adcionados ao
- * <tt>recipient</tt>.
- * @param filter o filtro que será usado para <b><u>recusar</u></b> um
- * candidato a ser adcionado ao <tt>recipient</tt>.
- * @param recipient coleção onde os objetos serão adicionados.
- * @see #addAllNotMatch(Collection, Filter, Collection)
- */
- public static <T> void addAllNotMatch(Collection<? extends T> candidates,
- Filter<T> filter, Collection recipient) {
- for (T object : candidates)
- if (!filter.match(object))
- recipient.add(object);
- }
- /**
- * Busca todos os objetos <b>T</b> na lista de <tt>candidates</tt> que
- * conferem com o <tt>filter</tt>.
- * <BR>
- * <BR>Tem o resultado inverso a {@link #findAllNotMatch(Collection, Filter)}
- * @param <T> o tipo de objeto a ser buscado.
- * @param candidates a coleção de condidatos aonde deseja-se realizar a
- * busca.
- * @param filter o filtro que será usado para <b><u>aceitar</u></b> um
- * candidato no resultado da busca.
- * @return todos os itens que passaram pelo filtro.
- * @see #findAllNotMatch(Collection, Filter)
- */
- public static <T> List<T> findAllMatch(Collection<? extends T> candidates,
- Filter<T> filter) {
- List<T> matchs = new ArrayList<T>(0);
- addAllMatch(candidates, filter, matchs);
- return matchs;
- }
- /**
- * Busca todos os objetos <b>T</b> na lista de <tt>candidates</tt> que
- * <u>não</u> conferem com o <tt>filter</tt>.
- * <BR>
- * <BR>Tem o resultado inverso a {@link #findAllMatch(Collection, Filter)}
- * @param <T> o tipo de objeto a ser buscado.
- * @param candidates a coleção de condidatos aonde deseja-se realizar a
- * busca.
- * @param filter o filtro que será usado para <b><u>negar</u></b> um
- * candidato no resultado da busca.
- * @return todos os itens que <u>não</u> passaram pelo filtro.
- * @see #findAllMatch(Collection, Filter)
- */
- public static <T> List<T> findAllNotMatch(Collection<? extends T> candidates,
- Filter<T> filter) {
- List<T> notMatchs = new ArrayList<T>(0);
- addAllNotMatch(candidates, filter, notMatchs);
- return notMatchs;
- }
- /**
- * Busca o primeiro objeto <tt>T</tt> na coleção <tt>candidates</tt> que
- * coincide com o <tt>filter</tt>.
- * @param <T> o tipo de objeto a procurar.
- * @param candidates a coleção de candidatos a ser pesquisados.
- * @param filter o filtro que será usado para <b><u>aceitar</u></b> o
- * candidato.
- * @return O primeiro objeto de <tt>candidates</tt> que coincidir com o
- * <tt>filter</tt>.
- */
- public static <T> T findFirstMatch(Collection<? extends T> candidates,
- Filter<T> filter) {
- for (T object : candidates)
- if (filter.match(object))
- return object;
- return null;
- }
- /**
- * Busca o primeiro objeto <tt>T</tt> na coleção <tt>candidates</tt> que
- * <u>não</u> coincide com o <tt>filter</tt>.
- * @param <T> o tipo de objeto a procurar.
- * @param candidates a coleção de candidatos a ser pesquisados.
- * @param filter o filtro que será usado para <b><u>recusar</u></b> o
- * candidato.
- * @return O primeiro objeto de <tt>candidates</tt> que <u>não</u>
- * coincidir com o <tt>filter</tt>.
- */
- public static <T> T findFirstNotMatch(Collection<? extends T> candidates,
- Filter<T> filter) {
- for (T object : candidates)
- if (!filter.match(object))
- return object;
- return null;
- }
- /**
- * Remove da coleção de <tt>candidates</tt> todos os objetos <tt>T</tt> que
- * coincidirem com o <tt>filter</tt>.
- * <BR>
- * <BR>Tem o resultado inverso a {@link #retainAll(Collection, Filter)}.
- * @param <T> o tipo de objeto a ser filtrado.
- * @param candidates a coleção que será filtrada.
- * @param filter o filtro que será usado para <b><u>remover</u></b> os
- * candidato, da coleção <tt>candidates</tt>.
- * @throws UnsupportedOperationException caso a operação
- * {@link Iterator#remove()} não seja suportada pelo
- * {@link Iterator} gerado pela coleção <tt>candidates</tt>.
- * @see Collection#iterator()
- */
- public static <T> void removeAll(Collection<? extends T> candidates,
- Filter<T> filter) throws UnsupportedOperationException {
- for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();)
- if (filter.match(itr.next()))
- itr.remove();
- }
- /**
- * Retem na coleção de <tt>candidates</tt> apenas os objetos <tt>T</tt> que
- * coincidirem com o <tt>filter</tt>.
- * <BR>
- * <BR>Tem o resultado inverso a {@link #removeAll(Collection, Filter)}.
- * @param <T> o tipo de objeto a ser filtrado.
- * @param candidates a coleção que será filtrada.
- * @param filter o filtro que será usado para <b><u>reter</u></b> os
- * candidato, da coleção <tt>candidates</tt>.
- * @throws UnsupportedOperationException caso a operação
- * {@link Iterator#remove()} não seja suportada pelo
- * {@link Iterator} gerado pela coleção <tt>candidates</tt>.
- * @see Collection#iterator()
- */
- public static <T> void retainAll(Collection<? extends T> candidates,
- Filter<T> filter) throws UnsupportedOperationException {
- for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();)
- if (!filter.match(itr.next()))
- itr.remove();
- }
- public static <T> T removeFirstMatch(Collection<? extends T> candidates,
- Filter<T> filter) throws UnsupportedOperationException {
- for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();) {
- T object = itr.next();
- if (filter.match(object)) {
- itr.remove();
- return object;
- }
- }
- return null;
- }
- public static <T> T removeFirstNotMatch(Collection<? extends T> candidates,
- Filter<T> filter) throws UnsupportedOperationException {
- for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();) {
- T object = itr.next();
- if (!filter.match(object)) {
- itr.remove();
- return object;
- }
- }
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement