Advertisement
MrPolywhirl

Filtering jdk7 vs Guava vs jdk8

Sep 15th, 2014
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.56 KB | None | 0 0
  1. //DEFINE BradyBunch.java {CLASS}
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.stream.Collectors;
  8.  
  9. import com.google.common.base.Joiner;
  10. import com.google.common.collect.Collections2;
  11. import com.google.common.collect.Lists;
  12.  
  13. public class BradyBunch {
  14.  
  15.     /**
  16.      * Native JDK 7 predicate for filtering.
  17.      *
  18.      * @param <T>
  19.      *
  20.      * @see BradyBunch#filter1(List)
  21.      */
  22.     public static interface NativePredicate<T> {
  23.         public boolean filter(T t);
  24.     }
  25.  
  26.     /**
  27.      * Native JDK 7 filtering for collections.
  28.      *
  29.      * @see BradyBunch#filter1(List)
  30.      */
  31.     public static final class NativeFilter {
  32.         public static <T> Collection<T> filter(Collection<T> col,
  33.                 NativePredicate<T> predicate) {
  34.             Collection<T> copy = new ArrayList<T>();
  35.             for (Iterator<T> i = col.iterator(); i.hasNext();) {
  36.                 T obj = i.next();
  37.                 if (predicate.filter(obj)) {
  38.                     copy.add(obj);
  39.                 }
  40.             }
  41.             return copy;
  42.         }
  43.     }
  44.  
  45.     /**
  46.      * @see BradyBunch#filter1(List)
  47.      */
  48.     private static final NativePredicate<Actor> IS_MALE_JDK7
  49.     = new NativePredicate<Actor>() {
  50.         @Override
  51.         public boolean filter(Actor actor) {
  52.             return actor.getGender() == Gender.MALE;
  53.         };
  54.     };
  55.  
  56.     /**
  57.      * @see BradyBunch#filter2(List)
  58.      */
  59.     private static final com.google.common.base.Predicate<Actor> IS_MALE_GUAVA
  60.     = new com.google.common.base.Predicate<Actor>() {
  61.         @Override
  62.         public boolean apply(Actor actor) {
  63.             return actor.getGender() == Gender.MALE;
  64.         }
  65.     };
  66.  
  67.     /**
  68.      * @see BradyBunch#filter3(List)
  69.      */
  70.     private static final java.util.function.Predicate<Actor> IS_MALE_JDK8
  71.     = new java.util.function.Predicate<Actor>() {
  72.         @Override
  73.         public boolean test(Actor actor) {
  74.             return actor.getGender().equals(Gender.MALE);
  75.         }
  76.     };
  77.  
  78.     /**
  79.      * Native JDK 7 filtering.
  80.      *
  81.      * @param actors
  82.      *
  83.      * @see BradyBunch.NativeFilter#filter(Collection,NativePredicate)
  84.      * @see BradyBunch.NativePredicate
  85.      */
  86.     private static void filter1(List<Actor> actors) {
  87.         printList(Lists.newArrayList(
  88.                 NativeFilter.filter(actors, IS_MALE_JDK7)));
  89.     }
  90.  
  91.     /**
  92.      * Guava filtering.
  93.      *
  94.      * @param actors
  95.      *
  96.      * @see com.google.common.collect.Collections2#filter(Collection,Predicate)
  97.      * @see com.google.common.base.Predicate
  98.      */
  99.     private static void filter2(List<Actor> actors) {
  100.         printList(Lists.newArrayList(
  101.                 Collections2.filter(actors, IS_MALE_GUAVA)));
  102.     }
  103.  
  104.     /**
  105.      * JDK 8 filtering with predefined predicate.
  106.      *
  107.      * @param actors
  108.      *
  109.      * @see java.util.stream.Stream#filter()
  110.      * @see java.util.function.Predicate
  111.      */
  112.     private static void filter3(List<Actor> actors) {
  113.         printList(actors.stream().filter(IS_MALE_JDK8)
  114.                 .collect(Collectors.toList()));
  115.     }
  116.  
  117.     /**
  118.      * JDK 8 filtering with lambda predicate.
  119.      *
  120.      * @inherit {@link org.gradle.BradyBunch#filter3(List)}
  121.      * @param actors
  122.      */
  123.     private static void filter4(List<Actor> actors) {
  124.         printList(actors.stream()
  125.                 .filter(a -> a.getGender().equals(Gender.MALE))
  126.                 .collect(Collectors.toList()));
  127.     }
  128.  
  129.     /**
  130.      * Print a generic list with line-feeds as a separator.
  131.      *
  132.      * @param list
  133.      */
  134.     private static final <T> void printList(List<T> list) {
  135.         System.out.println("--- LIST ---");
  136.         System.out.println(Joiner.on("\n").join(list));
  137.     }
  138.  
  139.     /**
  140.      * Main program, run 4 different filters to retrieve the same result.
  141.      */
  142.     public static void main(String[] args) {
  143.         final List<Actor> cast = Lists.newArrayList(
  144.             new TelevisionCharacter("Alice Nelson", "Ann B. Davis", Gender.FEMALE, "1926-05-26"),
  145.             new TelevisionCharacter("Carol Brady", "Florence Henderson", Gender.FEMALE, "1934-02-14"),
  146.             new TelevisionCharacter("Marcia Brady", "Maureen McCormick", Gender.FEMALE, "1956-08-05"),
  147.             new TelevisionCharacter("Cindy Brady", "Susan Olsen", Gender.FEMALE, "1961-08-14"),
  148.             new TelevisionCharacter("Jan Brady", "Eve Plumb", Gender.FEMALE, "1958-04-29"),
  149.             new TelevisionCharacter("Mike Brady", "Robert Reed", Gender.MALE, "1932-10-19"),
  150.             new TelevisionCharacter("Greg Brady", "Barry Williams", Gender.MALE, "1954-09-30"),
  151.             new TelevisionCharacter("Bobby Brady", "Mike Lookinland", Gender.MALE, "1960-12-19"),
  152.             new TelevisionCharacter("Peter Brady", "Christopher Knight", Gender.MALE, "1957-11-07")
  153.         );
  154.  
  155.         filter1(cast);
  156.         filter2(cast);
  157.         filter3(cast);
  158.         filter4(cast);
  159.     }
  160. }
  161.  
  162. //DEFINE TelevisionCharacter.java {CLASS}
  163.  
  164. public class TelevisionCharacter extends Actor {
  165.     private static final long serialVersionUID = 1068632925831570873L;
  166.  
  167.     private String roleName;
  168.  
  169.     public TelevisionCharacter() {
  170.         super();
  171.  
  172.         this.roleName = "";
  173.     }
  174.  
  175.     public TelevisionCharacter(String roleName, String name, Gender gender,
  176.             String dateOfBirth) {
  177.         super(name, gender, dateOfBirth);
  178.  
  179.         this.roleName = roleName;
  180.     }
  181.  
  182.     public String getRoleName() {
  183.         return roleName;
  184.     }
  185.  
  186.     public void setRoleName(String roleName) {
  187.         this.roleName = roleName;
  188.     }
  189.  
  190.     @Override
  191.     public String toString() {
  192.         return String.format("%s - %s", roleName, super.toString());
  193.     }
  194. }
  195.  
  196. //DEFINE Actor.java {CLASS}
  197.  
  198. import java.io.Serializable;
  199. import java.time.LocalDate;
  200. import java.time.format.DateTimeFormatter;
  201.  
  202. public class Actor implements Serializable {
  203.     private static final long serialVersionUID = -2512991451114066180L;
  204.  
  205.     private static final String dateFormat = "yyyy-MM-dd";
  206.     private static final DateTimeFormatter dobFrmt = DateTimeFormatter.ofPattern(dateFormat);
  207.  
  208.     private String name;
  209.     private Gender gender;
  210.     private LocalDate dateOfBirth;
  211.  
  212.     public Actor() {
  213.         this("", Gender.UNKNOWN, null);
  214.     }
  215.  
  216.     public Actor(String name, Gender gender, String dateOfBirth) {
  217.         this.name = name;
  218.         this.gender = gender;
  219.         this.setDateOfBirth(LocalDate.parse(dateOfBirth, dobFrmt));
  220.     }
  221.  
  222.     public String getName() {
  223.         return name;
  224.     }
  225.  
  226.     public Actor setName(String name) {
  227.         this.name = name;
  228.         return this;
  229.     }
  230.  
  231.     public Gender getGender() {
  232.         return gender;
  233.     }
  234.  
  235.     public Actor setGender(Gender gender) {
  236.         this.gender = gender;
  237.         return this;
  238.     }
  239.  
  240.     public LocalDate getDateOfBirth() {
  241.         return dateOfBirth;
  242.     }
  243.  
  244.     public void setDateOfBirth(LocalDate dateOfBirth) {
  245.         this.dateOfBirth = dateOfBirth;
  246.     }
  247.  
  248.     @Override
  249.     public String toString() {
  250.         return String.format("%s, %s (%s)", name, gender.getAbbr(), dateOfBirth.format(dobFrmt));
  251.     }
  252. }
  253.  
  254. //DEFINE Gender.javac {ENUM}
  255.  
  256. public enum Gender {
  257.     MALE("M"),
  258.     FEMALE("F"),
  259.     UNKNOWN("?");
  260.  
  261.     private String abbr;
  262.  
  263.     private Gender(String abbr) {
  264.         this.setAbbr(abbr);
  265.     }
  266.  
  267.     public String getAbbr() {
  268.         return abbr;
  269.     }
  270.  
  271.     public void setAbbr(String abbr) {
  272.         this.abbr = abbr;
  273.     }
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement