Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DEFINE BradyBunch.java {CLASS}
- package org.gradle;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- import java.util.stream.Collectors;
- import org.apache.commons.collections.CollectionUtils;
- import com.google.common.base.Joiner;
- import com.google.common.base.Strings;
- import com.google.common.collect.Collections2;
- import com.google.common.collect.Lists;
- public class BradyBunch {
- ////////////////////////////////////////////////////////////////////////////
- // Native JDK 7 Filtering //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Native JDK 7 predicate for filtering.
- *
- * @param <T>
- *
- * @see org.gradle.BradyBunch#filter1(List)
- */
- public static interface NativePredicate<T> {
- public boolean filter(T t);
- }
- /**
- * Native JDK 7 filtering for collections.
- *
- * @see org.gradle.BradyBunch#filter1(List)
- */
- public static final class NativeFilter {
- public static <T> Collection<T> filter(Collection<T> col,
- NativePredicate<T> predicate) {
- Collection<T> copy = new ArrayList<T>();
- for (Iterator<T> i = col.iterator(); i.hasNext();) {
- T obj = i.next();
- if (predicate.filter(obj)) {
- copy.add(obj);
- }
- }
- return copy;
- }
- }
- ////////////////////////////////////////////////////////////////////////////
- // Predicates //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * @see org.gradle.BradyBunch#filter2(List)
- */
- private static final NativePredicate<Actor> IS_MALE_JDK7
- = new NativePredicate<Actor>() {
- @Override
- public boolean filter(Actor actor) {
- return actor.getGender() == Gender.MALE;
- };
- };
- /**
- * @see org.gradle.BradyBunch#filter3(List)
- */
- private static final org.apache.commons.collections.Predicate IS_MALE_APACHE
- = new org.apache.commons.collections.Predicate() {
- @Override
- public boolean evaluate(Object actor) {
- return ((Actor) actor).getGender() == Gender.MALE;
- }
- };
- /**
- * @see org.gradle.BradyBunch#filter4(List)
- */
- private static final com.google.common.base.Predicate<Actor> IS_MALE_GUAVA
- = new com.google.common.base.Predicate<Actor>() {
- @Override
- public boolean apply(Actor actor) {
- return actor.getGender() == Gender.MALE;
- }
- };
- /**
- * @see org.gradle.BradyBunch#filter5(List)
- */
- private static final java.util.function.Predicate<Actor> IS_MALE_JDK8
- = new java.util.function.Predicate<Actor>() {
- @Override
- public boolean test(Actor actor) {
- return actor.getGender().equals(Gender.MALE);
- }
- };
- ////////////////////////////////////////////////////////////////////////////
- // Filter functions //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Native JDK 7 filtering.
- *
- * @param actors
- *
- * @see org.gradle.BradyBunch.NativeFilter#filter(Collection,NativePredicate)
- * @see org.gradle.BradyBunch.NativePredicate
- */
- private static List<Actor> filter1(List<Actor> actors) {
- return Lists.newArrayList(
- NativeFilter.filter(actors, IS_MALE_JDK7));
- }
- /**
- * Commons-Collections filtering.
- *
- * @param actors
- *
- * @see org.apache.commons.collections.CollectionUtils#filter(Collection,Predicate)
- * @see org.apache.commons.collections.Predicate
- */
- private static List<Actor> filter2(List<Actor> actors) {
- CollectionUtils.filter(actors, IS_MALE_APACHE);
- return Lists.newArrayList(actors);
- }
- /**
- * Guava filtering.
- *
- * @param actors
- *
- * @see com.google.common.collect.Collections2#filter(Collection,Predicate)
- * @see com.google.common.base.Predicate
- */
- private static List<Actor> filter3(List<Actor> actors) {
- return Lists.newArrayList(
- Collections2.filter(actors, IS_MALE_GUAVA));
- }
- /**
- * JDK 8 filtering with predefined predicate.
- *
- * @param actors
- *
- * @see java.util.stream.Stream#filter()
- * @see java.util.function.Predicate
- */
- private static List<Actor> filter4(List<Actor> actors) {
- return actors.stream().filter(IS_MALE_JDK8)
- .collect(Collectors.toList());
- }
- /**
- * JDK 8 filtering with lambda predicate.
- *
- * @inherit {@link org.gradle.BradyBunch#filter3(List)}
- * @param actors
- */
- private static List<Actor> filter5(List<Actor> actors) {
- return actors.stream()
- .filter(a -> a.getGender().equals(Gender.MALE))
- .collect(Collectors.toList());
- }
- ////////////////////////////////////////////////////////////////////////////
- // Utilities //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Print a generic list with line-feeds as a separator.
- *
- * @param list
- */
- private static final <T> String listToString(List<T> list) {
- return Joiner.on("\n").join(list);
- }
- private static final <T> void printList(String label, List<T> list) {
- String border = Strings.repeat("-", 60) + "\n";
- System.out.printf("%2$s| %1$-56s |%n%2$s%3$s%n",
- label, border, listToString(list));
- }
- ////////////////////////////////////////////////////////////////////////////
- // Main driver //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Main program, run 5 different filters to retrieve the same result.
- */
- public static void main(String[] args) {
- final List<Actor> cast = Lists.newArrayList(
- new TelevisionCharacter("Alice Nelson", "Ann B. Davis", Gender.FEMALE, "1926-05-26"),
- new TelevisionCharacter("Carol Brady", "Florence Henderson", Gender.FEMALE, "1934-02-14"),
- new TelevisionCharacter("Marcia Brady", "Maureen McCormick", Gender.FEMALE, "1956-08-05"),
- new TelevisionCharacter("Cindy Brady", "Susan Olsen", Gender.FEMALE, "1961-08-14"),
- new TelevisionCharacter("Jan Brady", "Eve Plumb", Gender.FEMALE, "1958-04-29"),
- new TelevisionCharacter("Mike Brady", "Robert Reed", Gender.MALE, "1932-10-19"),
- new TelevisionCharacter("Greg Brady", "Barry Williams", Gender.MALE, "1954-09-30"),
- new TelevisionCharacter("Bobby Brady", "Mike Lookinland", Gender.MALE, "1960-12-19"),
- new TelevisionCharacter("Peter Brady", "Christopher Knight", Gender.MALE, "1957-11-07")
- );
- printList("JDK 7", filter1(cast));
- printList("Apache Commons Collections", filter2(cast));
- printList("Google Guava", filter3(cast));
- printList("JDK 8 (Predicate)", filter4(cast));
- printList("JDK 8 (Lambda)", filter5(cast));
- }
- }
- //DEFINE TelevisionCharacter.java {CLASS}
- public class TelevisionCharacter extends Actor {
- private static final long serialVersionUID = 1068632925831570873L;
- private String roleName;
- public TelevisionCharacter() {
- super();
- this.roleName = "";
- }
- public TelevisionCharacter(String roleName, String name, Gender gender,
- String dateOfBirth) {
- super(name, gender, dateOfBirth);
- this.roleName = roleName;
- }
- public String getRoleName() {
- return roleName;
- }
- public void setRoleName(String roleName) {
- this.roleName = roleName;
- }
- @Override
- public String toString() {
- return String.format("%s - %s", roleName, super.toString());
- }
- }
- //DEFINE Actor.java {CLASS}
- import java.io.Serializable;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- public class Actor implements Serializable {
- private static final long serialVersionUID = -2512991451114066180L;
- private static final String dateFormat = "yyyy-MM-dd";
- private static final DateTimeFormatter dobFrmt = DateTimeFormatter.ofPattern(dateFormat);
- private String name;
- private Gender gender;
- private LocalDate dateOfBirth;
- public Actor() {
- this("", Gender.UNKNOWN, null);
- }
- public Actor(String name, Gender gender, String dateOfBirth) {
- this.name = name;
- this.gender = gender;
- this.setDateOfBirth(LocalDate.parse(dateOfBirth, dobFrmt));
- }
- public String getName() {
- return name;
- }
- public Actor setName(String name) {
- this.name = name;
- return this;
- }
- public Gender getGender() {
- return gender;
- }
- public Actor setGender(Gender gender) {
- this.gender = gender;
- return this;
- }
- public LocalDate getDateOfBirth() {
- return dateOfBirth;
- }
- public void setDateOfBirth(LocalDate dateOfBirth) {
- this.dateOfBirth = dateOfBirth;
- }
- @Override
- public String toString() {
- return String.format("%s, %s (%s)", name, gender.getAbbr(), dateOfBirth.format(dobFrmt));
- }
- }
- //DEFINE Gender.javac {ENUM}
- public enum Gender {
- MALE("M"),
- FEMALE("F"),
- UNKNOWN("?");
- private String abbr;
- private Gender(String abbr) {
- this.setAbbr(abbr);
- }
- public String getAbbr() {
- return abbr;
- }
- public void setAbbr(String abbr) {
- this.abbr = abbr;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- // Program output //
- ////////////////////////////////////////////////////////////////////////////////
- // ------------------------------------------------------------
- // | JDK 7 |
- // ------------------------------------------------------------
- // Mike Brady - Robert Reed, M (1932-10-19)
- // Greg Brady - Barry Williams, M (1954-09-30)
- // Bobby Brady - Mike Lookinland, M (1960-12-19)
- // Peter Brady - Christopher Knight, M (1957-11-07)
- // ------------------------------------------------------------
- // | Apache Commons Collections |
- // ------------------------------------------------------------
- // Mike Brady - Robert Reed, M (1932-10-19)
- // Greg Brady - Barry Williams, M (1954-09-30)
- // Bobby Brady - Mike Lookinland, M (1960-12-19)
- // Peter Brady - Christopher Knight, M (1957-11-07)
- // ------------------------------------------------------------
- // | Google Guava |
- // ------------------------------------------------------------
- // Mike Brady - Robert Reed, M (1932-10-19)
- // Greg Brady - Barry Williams, M (1954-09-30)
- // Bobby Brady - Mike Lookinland, M (1960-12-19)
- // Peter Brady - Christopher Knight, M (1957-11-07)
- // ------------------------------------------------------------
- // | JDK 8 (Predicate) |
- // ------------------------------------------------------------
- // Mike Brady - Robert Reed, M (1932-10-19)
- // Greg Brady - Barry Williams, M (1954-09-30)
- // Bobby Brady - Mike Lookinland, M (1960-12-19)
- // Peter Brady - Christopher Knight, M (1957-11-07)
- // ------------------------------------------------------------
- // | JDK 8 (Lambda) |
- // ------------------------------------------------------------
- // Mike Brady - Robert Reed, M (1932-10-19)
- // Greg Brady - Barry Williams, M (1954-09-30)
- // Bobby Brady - Mike Lookinland, M (1960-12-19)
- // Peter Brady - Christopher Knight, M (1957-11-07)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement