terça-feira, 15 de dezembro de 2009

Perlismos em Java II

No primeiro "Perlismos" eu criei uma classe para emular a função grep do Perl. Eu devia ter seguido melhor a sabedoria do camelo e usado a mesma ordem dos parâmetros, porque logo percebi que com varargs seria possível fazer algo ainda mais prático.

import java.util.*;

public class Grep {

  public static <T> List<T> grep(Grepping<T> mapping, List<T> in) {
    List<T> out=new ArrayList<T>();
    for(T t : in) {
      if(mapping.map(t)) {
       out.add(t);
      }
    }
    return out;
   }

  public static <T> List<T> grep(Grepping<T> mapping, T... in) {
    List<T> out=new ArrayList<T>();
    if(in!=null) {
      for(int i=0; i<in.length; i++) {
        if(mapping.map(in[i])) {
          out.add(in[i]);
        }
      }
    }
    return out;
  }
}

Com isso, posso fazer chamadas mesmo quando não tiver uma lista. Não gosto de arbitrariamente criar estruturas só para poder usar um método. Com vargars, a segunda versão de grep() pode receber uma seqüência qualquer de elementos, como no exemplo abaixo:

  mulheres=Grep.grep(PessoaGrepping.MULHERES,
              fulano, ciclana, beltrano, arlinda);

Nenhum comentário: