Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DEFINE BradyBunch.java {CLASS}
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- import java.util.stream.Collectors;
- import com.google.common.base.Joiner;
- import com.google.common.collect.Collections2;
- import com.google.common.collect.Lists;
- public class BradyBunch {
- /**
- * Native JDK 7 predicate for filtering.
- *
- * @param <T>
- *
- * @see BradyBunch#filter1(List)
- */
- public static interface NativePredicate<T> {
- public boolean filter(T t);
- }
- /**
- * Native JDK 7 filtering for collections.
- *
- * @see 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;
- }
- }
- /**
- * @see BradyBunch#filter1(List)
- */
- private static final NativePredicate<Actor> IS_MALE_JDK7
- = new NativePredicate<Actor>() {
- @Override
- public boolean filter(Actor actor) {
- return actor.getGender() == Gender.MALE;
- };
- };
- /**
- * @see BradyBunch#filter2(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 BradyBunch#filter3(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);
- }
- };
- /**
- * Native JDK 7 filtering.
- *
- * @param actors
- *
- * @see BradyBunch.NativeFilter#filter(Collection,NativePredicate)
- * @see BradyBunch.NativePredicate
- */
- private static void filter1(List<Actor> actors) {
- printList(Lists.newArrayList(
- NativeFilter.filter(actors, IS_MALE_JDK7)));
- }
- /**
- * Guava filtering.
- *
- * @param actors
- *
- * @see com.google.common.collect.Collections2#filter(Collection,Predicate)
- * @see com.google.common.base.Predicate
- */
- private static void filter2(List<Actor> actors) {
- printList(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 void filter3(List<Actor> actors) {
- printList(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 void filter4(List<Actor> actors) {
- printList(actors.stream()
- .filter(a -> a.getGender().equals(Gender.MALE))
- .collect(Collectors.toList()));
- }
- /**
- * Print a generic list with line-feeds as a separator.
- *
- * @param list
- */
- private static final <T> void printList(List<T> list) {
- System.out.println("--- LIST ---");
- System.out.println(Joiner.on("\n").join(list));
- }
- /**
- * Main program, run 4 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")
- );
- filter1(cast);
- filter2(cast);
- filter3(cast);
- filter4(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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement