Advertisement
Guest User

lavieri

a guest
Apr 2nd, 2009
2,109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.32 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. import java.util.List;
  5.  
  6. /**
  7.  * Classe utilitária para manipular coleções
  8.  * @author Tomaz Lavieri
  9.  */
  10. public class CollectionUtils {
  11.     /**
  12.      * Não é possivel instaciar CollectionUtils.
  13.      */
  14.     private CollectionUtils(){}
  15.  
  16.     /**
  17.      * Adciona a coleção <tt>recipient</tt> todos os objetos <tt>T</tt> da lista
  18.      * de <tt>candidates</tt> que coincidirem com o <tt>filter</tt>.
  19.      * <BR>
  20.      * <BR>Adciona o inverso dos itens de <tt>candidates</tt> que
  21.      * {@link #addAllNotMatch(Collection, Filter, Collection)} adcionaria.
  22.      * @param   <T> o tipo de objeto a ser adcionado.
  23.      * @param   candidates a coleção de candidatos a serem adcionados ao
  24.      *          <tt>recipient</tt>.
  25.      * @param   filter o filtro que será usado para <b><u>aceitar</u></b> um
  26.      *          candidato a ser adcionado ao <tt>recipient</tt>.
  27.      * @param   recipient coleção onde os objetos serão adicionados.
  28.      * @see #addAllNotMatch(Collection, Filter, Collection)
  29.      */
  30.     public static <T> void addAllMatch(Collection<? extends T> candidates,
  31.             Filter<T> filter, Collection recipient) {
  32.         for (T object : candidates)
  33.             if (filter.match(object))
  34.                 recipient.add(object);
  35.     }
  36.  
  37.     /**
  38.      * Adciona a coleção <tt>recipient</tt> todos os objetos <tt>T</tt> da lista
  39.      * de <tt>candidates</tt> que não coincidirem com o <tt>filter</tt>.
  40.      * <BR>
  41.      * <BR>Adciona o inverso dos itens de <tt>candidates</tt> que
  42.      * {@link #addAllMatch(Collection, Filter, Collection)} adcionaria.
  43.      * @param   <T> o tipo de objeto a ser adcionado.
  44.      * @param   candidates a coleção de candidatos a serem adcionados ao
  45.      *          <tt>recipient</tt>.
  46.      * @param   filter o filtro que será usado para <b><u>recusar</u></b> um
  47.      *          candidato a ser adcionado ao <tt>recipient</tt>.
  48.      * @param   recipient coleção onde os objetos serão adicionados.
  49.      * @see #addAllNotMatch(Collection, Filter, Collection)
  50.      */
  51.     public static <T> void addAllNotMatch(Collection<? extends T> candidates,
  52.             Filter<T> filter, Collection recipient) {
  53.         for (T object : candidates)
  54.             if (!filter.match(object))
  55.                 recipient.add(object);
  56.     }
  57.  
  58.     /**
  59.      * Busca todos os objetos <b>T</b> na lista de <tt>candidates</tt> que
  60.      * conferem com o <tt>filter</tt>.
  61.      * <BR>
  62.      * <BR>Tem o resultado inverso a {@link #findAllNotMatch(Collection, Filter)}
  63.      * @param   <T> o tipo de objeto a ser buscado.
  64.      * @param   candidates a coleção de condidatos aonde deseja-se realizar a
  65.      *          busca.
  66.      * @param   filter o filtro que será usado para <b><u>aceitar</u></b> um
  67.      *          candidato no resultado da busca.
  68.      * @return  todos os itens que passaram pelo filtro.
  69.      * @see #findAllNotMatch(Collection, Filter)
  70.      */
  71.     public static <T> List<T> findAllMatch(Collection<? extends T> candidates,
  72.             Filter<T> filter) {
  73.         List<T> matchs = new ArrayList<T>(0);
  74.         addAllMatch(candidates, filter, matchs);
  75.         return matchs;
  76.     }
  77.  
  78.     /**
  79.      * Busca todos os objetos <b>T</b> na lista de <tt>candidates</tt> que
  80.      * <u>não</u> conferem com o <tt>filter</tt>.
  81.      * <BR>
  82.      * <BR>Tem o resultado inverso a {@link #findAllMatch(Collection, Filter)}
  83.      * @param   <T> o tipo de objeto a ser buscado.
  84.      * @param   candidates a coleção de condidatos aonde deseja-se realizar a
  85.      *          busca.
  86.      * @param   filter o filtro que será usado para <b><u>negar</u></b> um
  87.      *          candidato no resultado da busca.
  88.      * @return  todos os itens que <u>não</u> passaram pelo filtro.
  89.      * @see #findAllMatch(Collection, Filter)
  90.      */
  91.     public static <T> List<T> findAllNotMatch(Collection<? extends T> candidates,
  92.             Filter<T> filter) {
  93.         List<T> notMatchs = new ArrayList<T>(0);
  94.         addAllNotMatch(candidates, filter, notMatchs);
  95.         return notMatchs;
  96.     }
  97.  
  98.     /**
  99.      * Busca o primeiro objeto <tt>T</tt> na coleção <tt>candidates</tt> que
  100.      * coincide com o <tt>filter</tt>.
  101.      * @param   <T> o tipo de objeto a procurar.
  102.      * @param   candidates a coleção de candidatos a ser pesquisados.
  103.      * @param   filter o filtro que será usado para <b><u>aceitar</u></b> o
  104.      *          candidato.
  105.      * @return  O primeiro objeto de <tt>candidates</tt> que coincidir com o
  106.      *          <tt>filter</tt>.
  107.      */
  108.     public static <T> T findFirstMatch(Collection<? extends T> candidates,
  109.             Filter<T> filter) {
  110.         for (T object : candidates)
  111.             if (filter.match(object))
  112.                 return object;
  113.         return null;
  114.     }
  115.  
  116.     /**
  117.      * Busca o primeiro objeto <tt>T</tt> na coleção <tt>candidates</tt> que
  118.      * <u>não</u> coincide com o <tt>filter</tt>.
  119.      * @param   <T> o tipo de objeto a procurar.
  120.      * @param   candidates a coleção de candidatos a ser pesquisados.
  121.      * @param   filter o filtro que será usado para <b><u>recusar</u></b> o
  122.      *          candidato.
  123.      * @return  O primeiro objeto de <tt>candidates</tt> que <u>não</u>
  124.      *          coincidir com o <tt>filter</tt>.
  125.      */
  126.     public static <T> T findFirstNotMatch(Collection<? extends T> candidates,
  127.             Filter<T> filter) {
  128.         for (T object : candidates)
  129.             if (!filter.match(object))
  130.                 return object;
  131.         return null;
  132.     }
  133.  
  134.     /**
  135.      * Remove da coleção de <tt>candidates</tt> todos os objetos <tt>T</tt> que
  136.      * coincidirem com o <tt>filter</tt>.
  137.      * <BR>
  138.      * <BR>Tem o resultado inverso a {@link #retainAll(Collection, Filter)}.
  139.      * @param <T> o tipo de objeto a ser filtrado.
  140.      * @param candidates a coleção que será filtrada.
  141.      * @param   filter o filtro que será usado para <b><u>remover</u></b> os
  142.      *          candidato, da coleção <tt>candidates</tt>.
  143.      * @throws  UnsupportedOperationException caso a operação
  144.      *          {@link Iterator#remove()} não seja suportada pelo
  145.      *          {@link Iterator} gerado pela coleção <tt>candidates</tt>.
  146.      * @see Collection#iterator()
  147.      */
  148.     public static <T> void removeAll(Collection<? extends T> candidates,
  149.             Filter<T> filter) throws UnsupportedOperationException {
  150.         for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();)
  151.             if (filter.match(itr.next()))
  152.                 itr.remove();
  153.     }
  154.  
  155.     /**
  156.      * Retem na coleção de <tt>candidates</tt> apenas os objetos <tt>T</tt> que
  157.      * coincidirem com o <tt>filter</tt>.
  158.      * <BR>
  159.      * <BR>Tem o resultado inverso a {@link #removeAll(Collection, Filter)}.
  160.      * @param <T> o tipo de objeto a ser filtrado.
  161.      * @param candidates a coleção que será filtrada.
  162.      * @param   filter o filtro que será usado para <b><u>reter</u></b> os
  163.      *          candidato, da coleção <tt>candidates</tt>.
  164.      * @throws  UnsupportedOperationException caso a operação
  165.      *          {@link Iterator#remove()} não seja suportada pelo
  166.      *          {@link Iterator} gerado pela coleção <tt>candidates</tt>.
  167.      * @see Collection#iterator()
  168.      */
  169.     public static <T> void retainAll(Collection<? extends T> candidates,
  170.             Filter<T> filter) throws UnsupportedOperationException {
  171.         for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();)
  172.             if (!filter.match(itr.next()))
  173.                 itr.remove();
  174.     }
  175.  
  176.     public static <T> T removeFirstMatch(Collection<? extends T> candidates,
  177.             Filter<T> filter) throws UnsupportedOperationException {
  178.         for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();) {
  179.             T object = itr.next();
  180.             if (filter.match(object)) {
  181.                 itr.remove();
  182.                 return object;
  183.             }
  184.         }
  185.         return null;
  186.     }
  187.  
  188.  
  189.     public static <T> T removeFirstNotMatch(Collection<? extends T> candidates,
  190.             Filter<T> filter) throws UnsupportedOperationException {
  191.         for(Iterator<? extends T> itr = candidates.iterator(); itr.hasNext();) {
  192.             T object = itr.next();
  193.             if (!filter.match(object)) {
  194.                 itr.remove();
  195.                 return object;
  196.             }
  197.         }
  198.         return null;
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement