When it comes to the importance not to repeat yourself while writing code, it is even important to take a look at most common activities. For example, instead of writing a lot of nested for statements, making your code illegible, you can use already Java built-in features. Let's take a look at some really simple utils:
Tested with:
Data to base our examples on:
CollectionUtils.select
CollectionUtils.find
Collections.max
Collections.sort
Download the complete example here!
Checkout this: https://subversion.assembla.com/svn/pablo-examples/utils-test
Then from a Terminal get into that folder and run: mvn test
To import it into Eclipse IDE, from a Terminal run: mvn eclipse:eclipse and import it as a Java Project
Tested with:
- commons-collections-3.2.1
- JUnit 4
- Maven 3
- CollectionUtils.select - If you want to retrieve one or more objects from a collection that meet your criteria (like id = 4 or age > 18)
- CollectionUtils.find - If you want to retrieve only one object from a collection that meet your criteria (like id = 6)
- Collections.max - If you want to retrieve only one object from a collection, the one which best meets one criteria
- Collections.sort - If you want to have a collection ordered by some criteria
Data to base our examples on:
@Before
public void init() {
Person p1 = new Person(1, "ruben", 17);
Person p2 = new Person(2, "carlos", 45);
Person p3 = new Person(3, "ismael", 47);
Person p4 = new Person(4, "raul", 30);
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
}
CollectionUtils.select
@Test
public void selectListTest() {
AdultPredicate adultPredicate = new AdultPredicate();
Collection adultPersons = CollectionUtils.select(personList, adultPredicate);
Assert.assertNotNull(adultPersons);
Assert.assertTrue(!adultPersons.isEmpty());
}
public class AdultPredicate implements Predicate {
@Override
public boolean evaluate(Object arg0) {
Person person = (Person) arg0;
if (person.getAge() != null &&
person.getAge() >= 18) {
return true;
}
return false;
}
}
CollectionUtils.find
@Test
public void findObjectTest() {
Predicate personNumberTwoPredicate = new PersonNumberTwoPredicate();
Person personNumberTwo = (Person) CollectionUtils.find(personList, personNumberTwoPredicate);
Assert.assertNotNull(personNumberTwo);
Assert.assertTrue(personNumberTwo.getId().equals(2));
}
public class PersonNumberTwoPredicate implements Predicate {
private static final Integer PERSON_ID_TWO = 2;
@Override
public boolean evaluate(Object arg0) {
Person person = (Person) arg0;
if (person.getId().equals(PERSON_ID_TWO)) {
return true;
}
return false;
}
}
Collections.max
@Test
public void oldestPersonTest() {
PersonAgeComparator personAgeComparator = new PersonAgeComparator();
Person oldestPerson = Collections.max(personList, personAgeComparator);
Assert.assertNotNull(oldestPerson);
Assert.assertTrue(oldestPerson.getAge().equals(47));
}
public class PersonAgeComparator implements Comparator{ @Override public int compare(Person o1, Person o2) { if (o1.getAge() > o2.getAge()) { return 1; } if (o1.getAge().equals(o2.getAge())) { return 0; } return -1; } }
Collections.sort
@Test
public void sortPersonsTest() {
PersonAgeComparator personAgeComparator = new PersonAgeComparator();
//Sort order age ascending
Collections.sort(personList, personAgeComparator);
//Sort order age descending
Collections.sort(personList, ComparatorUtils.reversedComparator(personAgeComparator));
}
Download the complete example here!
Checkout this: https://subversion.assembla.com/svn/pablo-examples/utils-test
Then from a Terminal get into that folder and run: mvn test
To import it into Eclipse IDE, from a Terminal run: mvn eclipse:eclipse and import it as a Java Project